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 中执行另一个集合导航 属性 并映射 Wife
或 Husbend
的外键给它。您可以在该 SO anwser 上找到相同的解决方案:Link.
我知道有相关主题: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 中执行另一个集合导航 属性 并映射 Wife
或 Husbend
的外键给它。您可以在该 SO anwser 上找到相同的解决方案:Link.