【问题标题】:Unable to map one to one in Entity Framework 6无法在实体框架 6 中一对一映射
【发布时间】:2016-07-14 17:44:24
【问题描述】:

我在 EF 6 中映射一对一关系时遇到问题。我的课程是:

public class Membership
{
     [Key]
     public decimal Id { get; set; }

     [ForeignKey("Id")]
     public virtual User User { get; set; }
}

public class User
{
     [Key]
     public decimal Id { get; set; }

     [ForeignKey("Id")]
     public virtual Membership Membership { get; set; }

}

我遇到了异常:

无法确定之间关联的主体端 类型“用户”和“会员”。本协会的主体 必须使用关系流式 API 显式配置 或数据注释。

我认为我的问题是两个表具有相同的键值并且不存储另一个表的键。谢谢。

【问题讨论】:

  • 还有为什么要使用decimal 作为id 列,int 或long 会是更好的选择。
  • 您不能在表之间建立真正的 1-1 关系。一侧必须是可选的,否则您将永远无法添加一行,因为每一侧都要求另一侧存在。
  • 谢谢伊戈尔。该教程有所帮助。我使用十进制是因为 DB2 驱动程序似乎无法将 DECIMAL[13,0] 映射到 long。
  • @DanZ 很高兴你成功了!

标签: c# .net entity-framework


【解决方案1】:

这会起作用

public class Membership
{
 [Key]
 public decimal Id { get; set; }

 [ForeignKey("User")]
 public decimal UserId {get;set;}
 public virtual User User { get; set; }
}

public class User
{
 [Key]
 public decimal Id { get; set; }

 [ForeignKey("Membership ")]
 public decimal MemberShipId {get;set;}
 public virtual Membership Membership { get; set; }

}

【讨论】:

    【解决方案2】:

    你应该 refer to this thread 每个 ladislav,不过我也会把内容放在这里。

    在一对一关系中,一端必须是主体,而另一端必须 依赖。主端是最先插入的端 它可以在没有依赖者的情况下存在。依赖端是 必须在主体之后插入的一个,因为它有外来的 校长的钥匙。

    如果实体框架 FK 依赖也必须是它的 PK 所以在 您应该使用的案例:

    public class Boo
    {
        [Key, ForeignKey("Foo")]
        public string BooId{get;set;}
        public Foo Foo{get;set;}
    }
    

    或者使用流畅的映射:

    modelBuilder.Entity<Foo>()
                .HasOptional(f => f.Boo)
                .WithRequired(s => s.Foo);
    

    【讨论】:

      猜你喜欢
      • 2011-07-07
      • 1970-01-01
      • 2014-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多