【问题标题】:One sided one-to-one relationship in Entity Framework实体框架中的单边一对一关系
【发布时间】:2020-02-02 14:15:00
【问题描述】:

我有两个模型类(TicketsActivities),其中Activities 更像是一个查找表,并且不应该包含任何导航属性或其他实体的 FK。

Tickets 中的一条记录应该有一个Activity,但在Tickets 的整个表中,会有很多相同的Activities。活动需要是一个表格,而不是(例如)一个枚举,因为将来可能会更新和修改。

虽然这看起来微不足道,但我一直遇到像Identity is Set to off 这样的错误。

我的模型:

public class Tickets
{
    public int ID {get; set;}

    // fk
    public int ActivityID {get; set;

    // nav property
    public Activity Activity {get; set;}
    // other properties.        
}

public class Activity
{
    public int ID {get; set;}
    public int RankOrder {get; set;}
    //other properties
}

我已经为Tickets 模型指定了一个域映射:

    builder.HasOne(t => t.Activity)
        .WithMany()
        .HasForeignKey(t => t.ActivityID);

基于此 SO-post 和 blogpost:herehere 但我无法正常工作,我最近的错误消息是:

SqlException:当 IDENTITY_INSERT 设置为 OFF 时,无法在表“Activity”中插入标识列的显式值。

此外,通过此映射,EF 似乎在 Activity 表中创建了一个 Ticket 列,这是我不想要的。

【问题讨论】:

    标签: c# entity-framework-core one-to-one


    【解决方案1】:

    试试这个

    builder.Entity<Ticket>() 
             .HasOne(t => t.Activity)
            .WithMany(a => a.Ticket)
            .HasForeignKey(t => t.ActivityID);
    

    【讨论】:

    • 我的活动表没有任何导航属性。所以.WithMany( a =&gt; a.Ticket) 是不可能的。我更改了代码以使其更清晰,也许string Activity 被视为导航道具。
    猜你喜欢
    • 1970-01-01
    • 2012-05-15
    • 2016-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-24
    • 1970-01-01
    相关资源
    最近更新 更多