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

标签 sql-server entity-framework sql-server-2008 entity-framework-4.1

.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/

相关文章:

sql-server - SQL Server Management Studio 说此语句不正确

sql-server - 即使条件不适用也要计数

c# - 如何从linq中的多个日期列中获取最小值?

tsql - 等待 ADO.NET 或 TSQL 中的事务复制

sql-server-2008 - Visio 2010数据源未显示在反向工程师向导中

sql - 从Powershell脚本调用Stored Proc时,保留 “restore pending”状态的较大数据库(10GB +)

java - 将相同的数据插入属于不同服务器的两个表中

.net - ADO.NET Entity Framework 中的持久性无知是否意味着我认为的意思?

c# - Entity Framework 4 : Bad performance with SQL Server 2008

c# - 使用 LINQ 关闭与数据库的连接?