如果我有2个带有复合主键的表1,其中一个键也是另一个表中的外键:
表1:
表2:
因为A既是表1中的PK又是表2中的FK,当我使用EF生成实体模型时,我同时拥有标量和导航表1中A的属性。我似乎无法删除A作为标量(我认为因为它是主键)。
我遇到的问题是,如果我创建一个table1Entity并将A的标量属性设置为新值,则A的导航属性不会自动更改(反之亦然)。
理想情况下,我只想要A来公开导航属性 - 如果A也不是复合主键的一部分,它就是它的行为方式。有没有办法实现这个目标?
答案 0 :(得分:1)
假设Table1派生自Table2,我是否正确?如果是这样,我会这样做:
(我也将两个表的PK改为同名,因为它们可能具有相同的含义 - 对于这个例子,我将使用示例ID)
答案 1 :(得分:1)
嗯,不是真的。使用schemabinding创建视图并在视图上创建聚簇索引(SQL Server 2008或更高版本,我不确定可以执行此操作的早期版本)。聚集索引将被识别为主键,从而诱使EF(VS)相信视图是真实的表。
答案 2 :(得分:0)
不是直接映射到表1,而是向数据库添加一个视图,该视图包含表1的所有字段,以及A(A2)的额外副本。 然后,将标量键映射到A2,将导航键映射到A.
(您将遇到一个问题,如果您使用视图,Visual Studio找不到主键;请通过手动编辑edmx文件的XML并添加< Key>< PropertyRef来解决此问题。 .. />< / Key>到表A的< EntityType>
我知道 - 这很丑陋而且可怕......但是嘿 - 它有效!