我的情况是,我有一张名为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
即.Elements
Elements1
这没有给我一个Divergences
DbSet。
我想要的是一个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 <-> *
实体框架设计器中的关系。我终于得到了一个Divergences
DbSet 但DivergenceId
属性在代码中没有用,我仍然得到了Element
类中的 2 个集合。重要的是要注意ElementId1
和ElementId2
构成复合主键。
您认为映射这种特定情况的正确方法是什么?感谢您的输入。