【问题标题】:Entity Framework: Two foreign keys connected by one collection实体框架:由一个集合连接的两个外键
【发布时间】:2015-03-20 22:37:17
【问题描述】:

我知道有相关主题:two Foreign Keys from same table,但我找不到解决我的问题的方法。我对 EF 很陌生。

我有以下模型类(代码优先):

public class Member
{
    [Key]
    public int MemberID { get; set; }
    public string Name {get; set;}
    public string Surname { get; set; }

    public virtual ICollection<Marriage> Marriages { get; set; }
}

public class Marriage
{
    [Key]
    public int MarriageID { get; set; }
    public string MarriagePlace { get; set; }
    public DateTime MarriageDate { get; set; }

    [ForeignKey("Husband")]
    public int HusbandID { get; set; }
    [ForeignKey("Wife")]
    public int WifeID { get; set; }

    public virtual Member Husband { get; set; }
    public virtual Member Wife { get; set; }
}

我的问题是丈夫和妻子都应该在会员类中连接到同一个婚姻集合。我做到了:

    modelBuilder.Entity<Marriage>()
        .HasRequired<Member>(m => m.Husband)
        .WithMany(m => m.Marriages)
        .HasForeignKey(m => m.HusbandID)
        .WillCascadeOnDelete(false);

丈夫现在已连接到 Merriages 收藏。但是当我尝试为 Wife 属性添加相同的内容时,一切都会中断:

    modelBuilder.Entity<Marriage>()
        .HasRequired<Member>(m => m.Wife)
        .WithMany(m => m.Marriages)
        .HasForeignKey(m => m.WifeID)
        .WillCascadeOnDelete(false);

我收到一个错误:

错误 1 ​​指定的架构无效。错误:未加载关系“FamilyTree.Models.Marriage_Husband”,因为“FamilyTree.Models.Member”类型不可用。 C:\Users\Sumiteru\Documents\Visual Studio 2013\Projects\FamilyTree\FamilyTree\App.xaml 9 21 FamilyTree

【问题讨论】:

    标签: c# .net entity-framework ef-code-first


    【解决方案1】:

    出现该错误是因为 EF 不知道他必须使用什么导航属性。在OnModelBuliding 方法中,您将Member's 外键设置为Marriages 两次,因此EF 对填充Marriages 时应使用的导航属性感到困惑并引发异常。

    EF codeplex 论坛上有一个主题,名为“moozzyk”的用户更清楚地解释了 EF 行为(在评论中):Link

    作为一种解决方案,您应该在Member 类中创建另一个集合导航属性,并将WifeHusbend 的外键映射到它。您可以在该 SO anwser 上找到相同的解决方案:Link

    【讨论】:

      猜你喜欢
      • 2016-06-08
      • 2017-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多