entity-framework - Entity Framework 代码优先跨多个表的唯一约束

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

因此,我正在使用 Entity Framework 的代码优先范例创建一个数据库模型,并且尝试创建两个必须共享唯一性的表(PlayersTeams)关于其主键的约束。

例如,我有 3 名 ID 为 “1”、“2”“3” 的玩家,当我尝试创建 ID 为 的团队时“2”,系统应该验证唯一性并失败,因为已经存在 ID 为 “2” 的玩家。

这可以通过数据注释实现吗?如果有帮助的话,这两个实体共享一个名为 IParticipant 的通用接口(interface)!

提前发送小伙子们!

最佳答案

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

这里最好的选择是使用一个参与者表,采用一种称为“每个层次结构表”(TPH)的技术。 Entity Framework 可以使用内部鉴别器列来管理单个表。共享属性可以放入基类中,非共享属性可以放入各个类中, Entity Framework 会将其组合到数据库中的单个大表中。此策略的主要缺点是非共享属性的列在数据库中将自动为空。 This article很好地描述了这个场景。

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

关于entity-framework - Entity Framework 代码优先跨多个表的唯一约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29217412/

相关文章:

asp.net-mvc - 如何指定 DataAnnotation ValidationAttribute 的顺序?

asp.net-mvc - Html.HiddenFor 和 HiddenInput 属性之间的区别

sql - 在EF中插入多行太慢,如何从SqlBulkCopy获取主键?

python - Django - 模型字段的动态唯一测试

mysql - 从实体类创建mysql数据库

c++ - 剔除 vector 中的重复条目

r - 计算分组矩阵中唯一值的数量

C# 正则表达式属性构造函数调用一次

c# - 从 DbConnection 获取 SqlConnection

c# - 更新密码时如何插入日期?