S.S*_*han 14 cascade entity-framework-core ef-core-2.0
对于可选关系(当外键可以接受时Null
),ClientSetNull
自 EF Core 2.0 以来引入了一个新行为作为删除行为的默认选项DeleteBehavior.ClientSetNull
。这具有SetNull
跟踪实体的语义和Restrict
未加载到内存中的数据库记录的(无操作)行为。
微软文档说:
如果您希望数据库即使在未加载子实体时也尝试将空值传播到子外键,请使用
SetNull
. 但是,请注意,数据库必须支持这一点,并且像这样配置数据库可能会导致其他限制,这在实践中通常会使此选项不切实际。这就是 SetNull 不是默认设置的原因。
但我认为,当关联的父实体被删除(db 中的每个地方)时,将依赖实体的 FK 设置为 Null 通常是正常的。而且,如上所述的那些“其他限制,这在实践中经常使这个选项不切实际......”是什么?
据我所知,文档所指的其他限制是循环或多路径级联。
例如,如果 MS Sql Server 不允许级联(删除和设置为空)
您甚至无法创建约束。
EF 核心可以通过 ClientSetNull 规避此限制。EF 处理 set null 操作,但只有在所有受影响的实体都加载到内存中时才能这样做。
归档时间: |
|
查看次数: |
6482 次 |
最近记录: |