【问题标题】:The DELETE statement conflicted with the REFERENCE constraint "FK_EntityAEntityB"DELETE 语句与 REFERENCE 约束“FK_EntityAEntityB”冲突
【发布时间】:2012-11-02 13:19:12
【问题描述】:

我看到了关于这个主题的答案,但与我的不完全一样。

我在设计器中使用 EF1 创建了一个数据库架构。 我在 2 个表(EntityAEntityB)之间添加了关系一个或零到多。 接下来,我将一条记录添加到表 EntityA 中,并将一条记录添加到 EntityB 中,该记录具有 EntityA 记录的 id。 正如我在设计模式(在 MS SMS 中)中看到的那样,字段 EntityA_id(在表 EntityB 中)设置为 ALLOW NULL, 我试图删除表 EntityA 中的记录。

我预计记录将被删除,并且表 EntityB 中的字段 EntityA_id 将自动设置为 NULL。 不幸的是,我遇到了异常:DELETE 语句与 REFERENCE 约束“FK_EntityAEntityB”冲突

外键字段设置为ALLOW NULL为什么会抛出异常?

【问题讨论】:

    标签: database entity-framework database-design


    【解决方案1】:

    外键字段设置为ALLOW NULL为什么会抛出异常?

    引发异常的原因是您尝试执行的操作会影响整行,而不仅仅是可为空的列。将子表中的列设置为允许null 规定该列允许没有值。除非 RDBMS 明确规定,否则可为空的列与引用完整性约束(如外键)无关;这意味着无论设置了任何特定列的规则,外键规则仍然会生效。外键规则规定,如果父行在子表中有子行,则不能删除它。这样做将呈现所有子记录孤儿。我们现在不想让任何人成为孤儿吧?

    外键向您保证的是,在没有引用父表的键列中的有效值的情况下,不会在子表中的外键列中插入/删除任何值,如下所示相反,不能有父行如果相关表中有任何子行,则删除(除非已指定 ON DELETE 子句)。

    rules of null foreign key columns in MSSQL(我假设您正在使用)声明允许外键列包含空值。这就是你可能需要做的事情才能完成。将列值设置为NULL,然后尝试删除。

    与此无关,您可能对this感兴趣

    【讨论】:

      猜你喜欢
      • 2012-10-23
      • 1970-01-01
      • 1970-01-01
      • 2021-03-25
      • 1970-01-01
      • 2011-04-16
      • 1970-01-01
      • 2021-02-10
      相关资源
      最近更新 更多