Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 实体框架代码跨多个表的第一个唯一约束_Entity Framework_Unique_Data Annotations_Code First_Unique Constraint - Fatal编程技术网

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

Entity framework 实体框架代码跨多个表的第一个唯一约束,entity-framework,unique,data-annotations,code-first,unique-constraint,Entity Framework,Unique,Data Annotations,Code First,Unique Constraint,因此,我正在使用Entity Framework的代码优先范式创建一个数据库模型,并尝试创建两个表(玩家和团队),它们必须共享关于主键的唯一性约束 例如,我有3名Id为“1”、“2”和“3”的玩家,当我尝试创建Id为“2”的团队时,系统应验证唯一性并失败,因为已经存在Id为“2”的玩家 对于数据注释,这可能吗?这两个实体共享一个称为IParticipant的公共接口(如果有帮助的话) Txs提前,小伙子们 您在这里描述的场景并不理想。这并不是对实体框架的真正限制;这更多的是对数据库堆栈的限制。默

因此,我正在使用Entity Framework的代码优先范式创建一个数据库模型,并尝试创建两个表(玩家团队),它们必须共享关于主键的唯一性约束

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

对于数据注释,这可能吗?这两个实体共享一个称为IParticipant的公共接口(如果有帮助的话)


Txs提前,小伙子们

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

这里最好的选择是使用一个
participant
表,使用一种称为“每个层次表”或TPH的技术。实体框架可以使用内部鉴别器列管理单个表。共享属性可以放在基类中,非共享属性可以放在单独的类中,实体框架将组合到数据库中的单个大表中。此策略的主要缺点是,数据库中非共享属性的列将自动为空。很好地描述了这个场景


我越是试图想出一个解决方案,我就意识到这是一个成功的例子。这个问题实际上没有一个好的解决方案,因为这个问题已经是一个建议的解决方案。这里有一个问题导致您创建一个界面,您建议需要使用该界面的实体具有唯一的
Id
。这听起来确实像是接口本身的设计问题,因为接口应该与它们应用到的实体无关。也许提供一些代码并说明您的问题实际是什么会有所帮助,因为您在这里询问如何实现的建议解决方案并不实际。

GUID的使用通常用于存档目的,但在您的情况下,我不太明白为什么您需要为两个特定表提供唯一的ID。你能告诉我们如何使用这个唯一的Id吗?否则我认为克莱斯是对的。如果您真的需要这样做,那么应该可以在构造函数中手动执行,但我认为在数据注释中不支持这样的操作!我会调查TPH,如果它碰巧解决了我的问题,我会将此标记为一个答案:)问题是我有一个系统,其中我有参与者,可以是团队和球员,我希望能够查询每个参与者的分数,提供一个唯一的id,如果与一名球员有比赛,我可以确信不会与一支球队有比赛。只有当两种类型的ID都是唯一的时,才能执行此操作。因此,您的TPH解决方案似乎与此相匹配,我将尽快对此进行研究:)