Entity Framework:两个外键由一个collection连接

Entity Framework: Two foreign keys connected by one collection

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

我有以下模型 classes (Code-First):

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; }
}

我的问题是丈夫和妻子都应该与会员 class 中的同一个婚姻 collection 相关联。我这样做了:

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

丈夫现在连接到 Merriages collection。但是当我试图为妻子添加同样的东西时,一切都坏了 属性:

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

我收到一个错误:

Error 1 Schema specified is not valid. Errors: The relationship 'FamilyTree.Models.Marriage_Husband' was not loaded because the type 'FamilyTree.Models.Member' is not available. C:\Users\Sumiteru\Documents\Visual Studio 2013\Projects\FamilyTree\FamilyTree\App.xaml 9 21 FamilyTree

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

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

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