我的情况是,我有一张名为Elements. 现在我正在创建一个名为的表Divergences,它将基本上存储成对的Elements. 的目的Divergence是检查两个Elements是否有不同的答案。
Element Divergence
--------- ----------
ElementId ElementId1
ElementId2
在上面的表模式中,ElementId1和ElementId2是外键映射到ElementId表Elements中并形成复合主键Divergence复合
我使用Database First 方法,在 SQL Server Management Studio 中创建表,然后我做了一个Update Model from Database...在 Entity Framework Designer 中创建表。
我面临的问题是,当 EF Designer 生成模型时,它会ICollection<Element>在类内创建 2 个集合,Element即.ElementsElements1

这没有给我一个DivergencesDbSet。
我想要的是一个Divergence类,我会在代码中做这样的事情:
Divergence d = new Divergence();
d.Element1 = element1;
d.Element2 = element2;
Database.Divergences.Add(d);
Database.SaveChanges();
后来:
Element e = Database.Elements.Single(e => e.ElementId == 7);
var divergences = e.Divergences;
我尝试向Divergence表中添加一个新列,如下所示:
Element Divergence
--------- ------------
ElementId DivergenceId
ElementId1
ElementId2
这正确地导致了1 <-> *实体框架设计器中的关系。我终于得到了一个DivergencesDbSet 但DivergenceId属性在代码中没有用,我仍然得到了Element类中的 2 个集合。重要的是要注意ElementId1和ElementId2构成复合主键。
您认为映射这种特定情况的正确方法是什么?感谢您的输入。