实体框架代码跨多个表的第一个唯一约束

时间:2015-03-23 18:11:32

标签: entity-framework unique data-annotations code-first unique-constraint

所以我使用Entity Framework的Code First范例创建了一个数据库模型,我试图创建两个表(玩家团队)必须共享关于其主键的唯一性约束。

例如,我有3个玩家有ID " 1"," 2" " 3" 当我尝试使用Id " 2" 创建一个团队时,系统应验证唯一性并失败,因为已存在ID " 2"

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

Txs提前小伙伴们!

1 个答案:

答案 0 :(得分:1)

你在这里描述的场景并不是很理想。这实际上并不是对实体框架的限制;它更像是对数据库堆栈的限制。默认情况下,Id主键是Identity列,而SQL本身并不真正支持“共享”Identity列的概念。您可以自行禁用身份并管理Id属性,但实体框架无法自动为您的实体构建导航属性。

这里最好的选择是在一个名为“Table Per Hierarchy”的技术或TPH中使用一个participant表。实体框架可以使用内部鉴别器列来管理单个表。共享属性可以放在基类中,非共享属性可以放在各个类上,实体框架将合并到数据库中的单个大表中。此策略的主要缺点是非共享属性的列将自动在数据库中为空。 This article很好地描述了这种情况。

我尝试提出解决方案越多,我就会发现这是XY Problem的一个例子。这个问题没有一个很好的解决方案,因为这个问题 已经 提出了一个解决方案。这里存在一个问题,导致您创建一个接口,建议要求使用该接口的实体具有唯一的Id。这听起来像接口本身的设计问题,因为接口应该与它们应用的实体无关。也许提供一些代码并显示你的问题实际上是有用的,因为你提出的解决方案如何在这里实现并不实际。