无法获取实体框架来处理 GUID 关系



我正在尝试实现以下最终结果。My Person 实体需要额外值的集合,此值集合因 Person 实例而异。我还有另一个联系人实体,它同样可以从实例到实例具有额外的值。

因此,我需要三个表,一个人员,联系人和一个额外表,其中额外表为每个需要额外值的人和联系人实例提供了一组额外值。通过为"人员和联系人"提供 GUID 字段,这意味着 GUID 值在两个表中都是唯一的,因此我可以将其用作要联接的字段。所以我希望定义看起来像这样...

Person
  Id - int - Primary Key
  Instance - GUID - Unique Constraint
Contact
  Id - int - Primary Key
  Instance - GUID - Unique Constraint
Extra
  Id - int - Primary Key
  Instance - GUID
  Value - string

但我无法将其建模为实体框架。我希望我的"个人"和"联系人"实体都有一个集合,每个集合都是与该实体相关的一组额外值。我使用上述列集创建了三个表。

但是我无法使关联按预期工作,它总是希望根据人员和联系人实体的主键向数据库添加额外的列。任何想法如何实际使其工作?或者,也许这在 EF 中是不可能的?

EF 无法做到这一点,因为它不支持唯一键。只有主键可以用作关系中的主体。

如前所述,EF 不支持唯一键。但是,如果实际上不需要对 Id 属性执行任何操作,则告知 EF Instance 是主键可能就足够了。EF 并不真正关心它是否是数据库级别的主键,它只需要知道它本身是否可以将其用作键。

编辑:实际上,这仍然行不通。除了不支持唯一键外,您的Extra.Instance不对应于任何固定实体。为了使它正常工作,您需要将Extra表拆分为PersonExtra表和ContactExtra表。无论如何,这可能是一个好主意,因为它允许您在数据库级别添加与您希望在 EF 中看到的外键约束相对应的外键约束。

EF 执行此操作

的方法是使用链接表 - 一个包含两列的简单表,这些列不会直接显示在模型中,但集合将可见。

例如

Person
  Id - int - Primary Key
  Instance - GUID - Unique Constraint
Contact
  Id - int - Primary Key
  Instance - GUID - Unique Constraint
Extra
  Id - int - Primary Key
  Instance - GUID
  Value - string
PersonExtra
  PersonId  - int
  ExtraId  - int
ContactExtra
  ContactId  - int
  ExtraId  - int
或者,如果

模型允许,请将主键更改为 GUID。

最新更新