【发布时间】:2013-07-19 17:38:38
【问题描述】:
我的情况是,我有一个名为 Elements 的表。现在我正在创建一个名为Divergences 的表,它将基本上存储成对的Elements。 Divergence 的目的是检查两个Elements 是否有不同的答案。
Element Divergence
--------- ----------
ElementId ElementId1
ElementId2
在上述表模式中,ElementId1 和ElementId2 是外键 映射到Elements 表中的ElementId 并形成复合主键 Divergence 表。
我使用 Database First 方法,在 SQL Server Management Studio 中创建表,然后在 Entity Framework Designer 中创建Update Model from Database...。
我面临的问题是,当 EF 设计器生成模型时,它会在 Element 类中创建 2 组 ICollection<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 仍然构成复合主键。
您认为映射这种特定情况的正确方法是什么?感谢您的意见。
【问题讨论】:
标签: entity-framework mapping composite-primary-key ef-database-first entity-framework-designer