因此,我使用实体框架的Code范式创建了一个数据库模型,并试图创建两个表(Player、和Teams),它们必须共享关于主键的唯一性约束。
例如,我有3个Id "1“、"2"和"3"的玩家,当我尝试创建一个Id "2"的团队时,系统应该验证唯一性并失败,因为已经存在一个Id "2"的球员。
通过数据注释,这是可能的吗?这两个实体共享一个名为IParticipant的公共接口,如果这有帮助的话!
预备役队员们!
发布于 2015-03-23 18:33:41
您在这里描述的场景并不理想。这实际上并不是对实体框架的限制,而是对数据库堆栈的限制。默认情况下,Id主键是一个标识列,而SQL本身并不真正支持“共享”标识列的概念。您可以禁用标识并自行管理Id属性,但实体框架无法自动为实体构建导航属性。
这里最好的选择是使用一个participant表,使用一种称为“每个层次结构表”的技术,即TPH。实体框架可以使用内部鉴别器列管理单个表。共享属性可以放在基类中,而非共享属性可以放在单独的类中,实体框架将组合成DB中的单个大表。此策略的主要缺点是,非共享属性的列在数据库中将自动为空。这篇文章很好地描述了这个场景。
我越努力想出一个解决方案,我就意识到这是XY问题的一个例子。这个问题并没有一个很好的解决方案,因为这个问题已经是提出的解决方案。这里有一个问题导致您创建了一个接口,您建议需要--使用该接口的实体--拥有一个唯一的Id。这听起来确实像是接口本身的设计问题,因为接口对于应用到的实体应该是不可知论的。也许提供一些代码并展示您的问题实际上是有帮助的,因为您在这里提出的解决方案实际上并不实用。
https://stackoverflow.com/questions/29217412
复制相似问题