对于可选关系(当外键可以接受 Null 时),自 EF Core 2.0 以来引入了一个新的 ClientSetNull 行为,作为 默认 0x251819212132351351351351351 的默认行为 0x25181921213234
这对于被跟踪实体具有 DeleteBehavior.ClientSetNull 语义,对于未加载到内存中的数据库记录具有 SetNull(无操作)行为。

entity-framework-core - EF Core - 为什么 ClientSetNull 是可选关系的默认 OnDelete 行为(而不是 SetNull)-LMLPHP

Microsoft docs 说:



但我认为,当关联的父实体被删除(db 中的每个地方)时,将依赖实体的 FK 设置为 Null 通常是正常的。而且,如上所述的那些“其他限制,这在实践中经常使这个选项不切实际......”是什么?

最佳答案

据我所知,文档所指的其他限制是循环或多路径级联。

例如,如果 MS Sql Server 不允许级联(删除和设置为空)

  • 更改将级联到它源自
  • 的同一个表
  • 同一个表有多个级联路径。就像表“A”影响表“B”和“C”一样,“B”和“C”都影响“D”。

  • 您甚至无法创建约束。

    EF 核心可以通过 ClientSetNull 规避此限制。 EF 处理 set null 操作,但只有在所有受影响的实体都加载到内存中时才能这样做。

    关于entity-framework-core - EF Core - 为什么 ClientSetNull 是可选关系的默认 OnDelete 行为(而不是 SetNull),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54326165/

    10-14 17:34
    查看更多