gpt4 book ai didi

sql-server - EF4.1 : Possible to have zero-or-one to zero-or-one (0. .1 到 0..1) 关系?

转载 作者:行者123 更新时间:2023-12-04 02:09:07 25 4
gpt4 key购买 nike

.NET 4.0 和 SQL Server 2008 R2。我试图表示 0..1 到 0..1 的关系,但我不断收到以下错误:

Error 113: Multiplicity conflicts with the referential constraint in Role '{0}' in relationship '{1}'. Because all of the properties in Dependent Role are non-nullable, multiplicity of the Principal Role must be '1'.

即使依赖实体中的属性 可以为空,我也会收到此消息。是否可以在 Entity Framework 中表示这种关系?

一个可能发生这种情况的例子(独立于这样做是否是好的数据库设计)是当你有一个独立存在的请求时,一个结果在请求完成后与它相关联,并且当请求最终被修剪,但结果全部保留。

最佳答案

不,这是不可能的,我怀疑它在 SQL Server 中是否有效。数据库关系要求一端变得依赖。这意味着它引用主体端的主键(PK)——我们称之为外键(FK)。如果我们谈论一对一关系,则必须将 FK 标记为唯一,以便从属表中只有一个记录可以引用主表中的给定记录。在这种情况下,唯一有效的关系是 0..1 - 1,其中主体可以在没有依赖项的情况下存在,但依赖项只有在与现有主体相关时才能存在,因为它的 FK 值必须设置为主体的 PK 值。理论上 FK 可以为空,但这取决于数据库如何实现唯一约束的方式。如果数据库将 null 计为另一个唯一值,则只有一个相关记录可以将 FK 设置为 null(我认为这是 SQL 服务器的情况)。

在 EF 中,这更加复杂,因为 EF 不支持唯一约束,因此只有当依赖实体中的 FK 也是其 PK 时,您才能建立一对一关系(= 无法将其设置为 null ).如果不能将 FK 设置为 null,则不能将其设置为 null,并且由于主体实体必须存在,否则参照完整性将引发错误。

最适合您的解决方案是将 Request 视为主要实体,将 Result 视为从属实体。必须首先创建请求,并且它必须在数据库中与 Result 保持一致。 Result 必须与相应的 Request 具有相同的 PK 值(该列不能自动递增)(并且 PK 必须是 FK 到 Request)。

关于sql-server - EF4.1 : Possible to have zero-or-one to zero-or-one (0. .1 到 0..1) 关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6455626/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com