【问题标题】:Entity Framework Database First - Composite Foreign Keys实体框架数据库优先 - 复合外键
【发布时间】:2012-11-15 17:43:47
【问题描述】:

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

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. 在后面的xml中手动创建这些复合外键 edmx(痛苦)
  2. 有实体框架正确生成这些外来 键,以便我拥有映射

谢谢!

【问题讨论】:

  • 您具体如何生成实体?使用 edmx 编辑器?您是否使用自定义代码生成策略?
  • OrganizationIDCode是你ShiftLeaveCodes表的复合主键吗?如果不是(例如,如果它只是唯一索引)它将不起作用。
  • 实体正在从数据库中生成,使用上下文菜单中的“从数据库更新模型”。
  • OrganizationID 和 Code 只是一个唯一索引,而不是主索引。为什么它们需要成为主索引?
  • 我已经更新了数据库,使 OrganizationID 和 Code 列组成了一个复合主键。这样做时,我仍然无法让 EF 在表之间自动生成这些关联和导航属性。

标签: entity-framework entity-framework-5 composite-key ef-database-first


【解决方案1】:

Entity Framework Database First 不会按照您的需要使用唯一键。如果您希望它们成为导航属性,则应将它们设置为外键。

现在,您必须选择:1) 您只需要 NavPrs,2) 您还需要连接表作为实体。

1) 为此,只需将这些外键设置为复合主键。

2) 要实现这一点,请将它们保留为外键,并为您的联结表声明一个身份类型 ID 列并将其设置为主键。

这应该适合你

【讨论】:

    【解决方案2】:

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

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

    即使引用的列成为 PK 解决了我在 EF6 中的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 2012-05-10
      相关资源
      最近更新 更多