针对可选关系(即外键可以接受
Null
)的情况,自EF Core 2.0以来引入了一个新的 ClientSetNull
行为作为默认的删除行为选项 DeleteBehavior.ClientSetNull
。
这对于已跟踪的实体具有 SetNull
语义,并且对于未加载到内存中的数据库记录具有 Restrict
(无操作)行为。
Microsoft文档表示:
如果您希望数据库尝试将空值传播到子外键,即使子实体未加载,则使用
SetNull
。但是,请注意,数据库必须支持此操作,并且配置数据库可能会导致其他限制,这在实践中通常使此选项不可行。这就是为什么SetNull不是默认值的原因。
但我认为通常在数据库中关联的父实体被删除时设置依赖实体的FK为Null是很正常的。此外,“其他限制,这在实践中通常使此选项不可行的限制是什么?”如上所述?