Entity Framework 数据库优先 - 复合外键

10

我有一个包含一些复合外键的数据库。例如,这是生成该外键的脚本:

ALTER TABLE [dbo].[WorkingRosters]  WITH NOCHECK ADD  CONSTRAINT
[FK_WorkingRoster_ShiftLeaveCode] FOREIGN KEY([OrganizationID], [ShiftLeaveCode])
REFERENCES [dbo].[ShiftLeaveCodes] ([OrganizationID], [Code])
GO

我正在尝试使用Entity Framework 5 Database-First从这个数据库生成模型。然而,由于复合外键的关联没有与所有表和其他简单外键一起生成。

我应该如何:

  1. 手动在edmx背后的xml中创建这些复合外键(很痛苦)
  2. 让Entity Framework正确生成这些外键,以便我可以进行映射

谢谢!


1
你是通过什么方式生成实体的?是使用edmx编辑器吗?还是使用自定义代码生成策略? - Heather
1
你的 ShiftLeaveCodes 表的主键是由 OrganizationIDCode 组成的吗?如果不是(例如只是唯一索引),那么它将无法正常工作。 - Ladislav Mrnka
实体对象正在从数据库中生成,可在上下文菜单中使用“从数据库更新模型”选项。 - Bo Rohlfsen
OrganizationID和Code只是唯一索引,不是主键。为什么它们需要成为主键索引? - Bo Rohlfsen
我已经更新了数据库,使得OrganizationID和Code列组成一个复合主键。但是这样做后,EF仍然无法自动生成这些表之间的关联和导航属性。 - Bo Rohlfsen
2个回答

2
实体框架数据库优先不会按照您的需求处理唯一键。如果您想将它们设置为导航属性,您应该将它们设置为外键。
现在,您有两个选择:1)只需要NavPrs,2)还需要联接表作为实体。
1)要实现这一点,只需将这些外键设置为复合主键即可。
2)要实现这一点,将它们保留为外键,并为您的联接表声明一个身份类型ID列,并将其设置为主键。
这应该适用于您。

0

我在EF6中遇到了同样的问题,在Visual Studio中“从数据库更新模型”无法识别一个复合外键,该外键引用另一张表中具有唯一索引但不是被引用表的复合主键的列。

在将被引用的表中的引用列作为复合主键并重新执行“从数据库更新模型”后,该外键被识别为导航属性。

即使将引用列作为主键对我而言也解决了EF6中的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接