Entity Framework Code First 跨多个表的唯一约束

Entity Framework Code First unique constraint across multiple tables

所以我正在使用 Entity Framework 的 Code First 范例创建一个数据库模型,我正在尝试创建两个表(PlayersTeams) 必须共享有关其主键的唯一性约束。

例如,我有 3 个 ID 为 "1"、"2""3" 的玩家,当我尝试创建一个 ID 为 "2" 的团队,系统应该验证唯一性并失败,因为已经存在一个 ID 为 "2".[= 的玩家11=]

数据注释是否可行?如果有帮助,这两个实体共享一个名为 IParticipant 的公共接口!

小伙子们提前致谢!

你在这里描述的场景并不理想。这并不是对 Entity Framework 的真正限制;它更多地是对数据库堆栈的限制。默认情况下,Id 主键是一个标识列,而 SQL 本身并不真正支持 "shared" 标识列的想法。您可以禁用 Identity 并自行管理 Id 属性,但是 Entity Framework 无法自动为您的实体构建导航属性。

此处最好的选择是在一种称为 "Table Per Hierarchy" 或 TPH 的技术中使用一个 participant table。 Entity Framework 可以使用内部鉴别器列管理单个 table。共享属性可以放在基础class中,非共享属性可以放在单独的class中,Entity Framework会合成一个大的table数据库。此策略的主要缺点是非共享属性的列在数据库中将自动为空。 This article 很好地描述了这个场景。

我越想越想出一个解决方案,我意识到这是一个例子XY Problem。这个问题确实没有很好的解决方案,因为这个问题已经是一个建议的解决方案。这里有一个问题导致您创建了一个接口,您建议 要求 使用该接口的实体具有唯一 Id。这听起来确实像是接口本身设计的问题,因为接口应该与它们所应用的实体无关。也许提供一些代码并显示您的 问题 实际上是什么会有所帮助,因为建议的 解决方案 您正在询问如何在此处实施并不是真的实用。