gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 03:08:21 25 4
gpt4 key购买 nike

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

Cascade Delete behaviors

Microsoft docs比如说:

If you want the database to also try to propagate null values to child foreign keys even when the child entity is not loaded, then use SetNull. However, note that the database must support this, and configuring the database like this can result in other restrictions, which in practice often makes this option impractical. This is why SetNull is not the default.



但我认为,当关联的父实体被删除(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/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com