【问题标题】:Entity Framework Associations: Error Because the Dependent Role properties are not the key properties实体框架关联:错误,因为从属角色属性不是关键属性
【发布时间】:2012-01-17 01:23:36
【问题描述】:

使用实体框架 4.1

我在实体框架中使用了以下表格

  • 用户(UserId PK 身份、用户名、密码)

  • Physician(PhysicianId 唯一标识,UserId 引用 User PK,PhysicianName)

  • PhysicianSite(SiteId、Location、PhysicianId FK 到医师表)

问题。实体框架不允许我将 Physician 与 PhysicianSite 关联,因为 PhysicianId 不是 Physician 表上的主键。

User 是 Physician 的基础,因为我的应用程序还有其他类型的用户,例如患者。

我收到以下错误

错误 2 错误 113:多重性在关系“PhysicianSitePhysician”中的“Physician”角色中无效。因为从属角色属性不是关键属性,所以从属角色的多重性的上限必须是*。

谁能告诉我如何在没有 PhysicianId 是 Physician 表上的主键的情况下创建与 Physician 到 PhysicianSite in Entity Framework 的关联?

【问题讨论】:

  • 问题:为什么 PhysicianId 不是 Physician 的 PK?
  • 要在实体框架中为 Physician 提供 User 的基本类型,您需要将 UserId 设置为 Physician 的主键。

标签: c# entity-framework domain-driven-design dns entity


【解决方案1】:

实体框架需要外键链接到表的主键。但是,Entity Framework 的主键不必与数据库中的主键匹配。如果你告诉 EF PhysicianId 是主键,它不会去检查它是否真的是主键。它会很乐意接受 PhysicianId 的外键。

如果您对 PhysicianId 有一些外键,而对真正的主键有一些外键,那么您就不走运了,但您似乎没有。

【讨论】:

  • 我给了医生一个基本类型的用户。为此,我必须将 UserId 设置为医师表的主键,这是有道理的。我必须通知 Entity Framework UserId 是 Physician 表的主键,所以我无法更改它。我想我不会走继承路线,只是在医师和用户之间建立关联,而不是医师从用户继承。
  • 啊,抱歉,我忽略了这一点。在这种情况下,不幸的是,EF 当前不支持您想要的。根据blogs.msdn.com/b/efdesign/archive/2011/03/09/… 的说法,有计划在未来的版本中添加它,但您必须等待。
  • 感谢您的意见和文章!
【解决方案2】:

从 EDMX 中删除所有表格并通过再次添加所有表格来更新 edmx。如果不刷新所有导航属性,则会出现此类错误

【讨论】:

    【解决方案3】:

    如果您有一个链接表,其中包含具有标识规范的列,请将其删除(这会将链接表限制为该链接表的唯一 ID 副本)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多