我看到了关于这个主题的答案,但不完全是我的答案。
我在设计器中使用EF1创建了一个db模式。 我在两个表( EntityA 和 EntityB )之间添加了一个或零到多个的关系。 接下来,我向表EntityA添加了一条记录,向EntityB添加了一条记录,其ID为EntityA记录。 正如我在设计模式(在MS SMS中)中看到的那样,字段EntityA_id(在表EntityB中)被设置为ALLOW NULL, 我试图删除表EntityA中的记录。
我预计该记录将被删除,表EntityB中的字段EntityA_id将自动设置为NULL。 不幸的是我得到了异常: DELETE语句与REFERENCE约束“FK_EntityAEntityB”冲突
如果带有外键的字段设置为ALLOW NULL,为什么会抛出异常?
答案 0 :(得分:0)
如果带有外键的字段设置为ALLOW NULL,为什么会抛出异常?
抛出异常的原因是您尝试执行的操作会影响整行,而不仅仅是可以为空的列。在子表中设置列以允许null
规定允许该列没有值。除非RDBMS明确规定,否则可空列与外键等参照完整性约束无关;这意味着无论是否已设置任何列特定规则,外键规则仍将启动。并且外键规则规定如果父行在子表中具有子行,则不能删除父行。这样做会渲染所有子记录孤儿。我们现在不希望任何人成为孤儿吗?
外键保证的是,在子表中没有在父表的键列中引用有效值的情况下,不会在外键列中插入/删除任何值,如下所示相反,没有父行可以删除(除非已指定ON DELETE
子句),如果相关表中有任何子行。
rules of null foreign key columns in MSSQL(我假设您正在使用)声明允许外键列包含空值。这就是你可能需要做的就是把它拉下来。将列值设置为NULL
,然后尝试删除。
与此无关,您可能对this
感兴趣