对于可选关系(当外键可以接受Null
时),自EF Core 2.0起引入了新的ClientSetNull
行为,作为删除行为{{ 1}}。
对于被跟踪实体,它具有DeleteBehavior.ClientSetNull
语义,对于未加载到内存中的数据库记录,它具有SetNull
(无动作)行为。
如果您希望数据库也尝试将空值传播给子级 即使未加载子实体,也可以使用外键
Restrict
。但是,请注意,数据库必须支持此功能,并且 像这样配置数据库可能会导致其他限制, 实际上,这通常使该选项不切实际。这就是为什么 SetNull不是默认值。
但是我认为删除关联的父对象时(在db中的每个位置)将依赖实体的FK设置为Null通常是正常的。还有,如上所述的那些“其他限制,在实践中通常会使该选择不切实际..”?
答案 0 :(得分:1)
据我所知,文档所指的其他限制是循环或多路径级联。
例如,如果MS Sql Server不允许进行级联(删除并设置为null)
您甚至无法创建约束。
EF内核可以使用ClientSetNull来规避此限制。 EF处理设置为null的操作,但只有在所有受影响的实体都已加载到内存中时,它才能这样做。