实体框架核心是否可以选择对不存在的引用使用默认值 0 而不是 null?



如果我有一个名为 Project 的对象,该对象具有一个名为 Creator 的属性,并且 creator 是复杂类型,则 EF 将自动使用值 null(如果尚未分配 Creator 属性(。是否可以在数据库字段中使用 0 而不是 null?

不,这会破坏数据库端的外键约束,因为对于Project行的外键,不会有一个主键为0Creator行指向。

在关系数据库中,至少在那些尊重外键约束的数据库中,行之间的每个关系都表示为一对主键和外键。 数据库旨在强制外键始终指向有效的主键。 这将阻止您将 FK 字段更新为 PK 字段中不存在的值。 只要 FK 仍然指向它,它也会因为你试图删除包含 PK 的行而大喊大叫(除非打开了级联删除,但这会变得复杂(。

从理论上讲,实体框架可能会被迫尝试执行所需的操作,但数据库会拒绝它,并且如果将 EF 配置为包含导航属性,则几乎肯定会在尝试检索包含 0/null 值的行时出现问题。

最新更新