EntityFramework Core 中的 DeleteBehavior.NoAction 和 DeleteBehavior.Restrict 有什么不同?

RAM*_*RAM 7 entity-framework entity-framework-core

我的代码中有这样的配置:

builder.HasMany(c => c.Libs)
       .WithOne(x=>x.Book)
       .HasForeignKey(x=>x.BookId)
       .OnDelete(DeleteBehavior.NoAction);  <<-------- Here
Run Code Online (Sandbox Code Playgroud)

我的问题是和value之间有什么不同NoActionRestrict

我读了微软的文档他们两人的描述是相同的!

在此处输入图片说明

arn*_*rni 10

这取决于数据库的实现。

在T-SQL和MySQL中,没有区别。

在 PostgreSQL 中,有一个区别:RESTRICT 和 NO ACTION 之间的区别


小智 -1

删除行为定义了删除 PK-FK 关系中的父实体时将采取的操作。本例中,父实体为 Book,子实体为 Libs,具有一对多关系。

NoAction:在这种情况下,当从数据库中删除 Book 表中的一行时,Libs 表中 BookId 与已删除 BookId 相同的所有行都将转换为 null。请注意,此方法不会从 Libs 表中删除任何项目,并且可能会使它们成为孤立的。

Restrict:在这种情况下,如果没有具有相同 BookId 的关联库,则只能从数据库中删除 Book 表中的行。请注意,只有删除所有关联的库后,才能删除“书籍”行。

Cascade:在这种情况下,如果删除 Book 行,则书籍中所有关联的 Libs 行将自动删除。

  • 你的参考是什么? (2认同)
  • 该文档描述了 NoAction 和 Restrict 的相同行为。在这两种情况下,“当删除相关主体时,从属实体中的外键属性的值将设置为 null”。在这两种情况下,如果删除内存中加载的两个实体的相关实体,空值将保存到数据库中。在这两种情况下,如果删除相关实体而没有将依赖实体加载到内存中,则依赖实体的数据库行不会更新,并且在验证外键约束时会发生异常。两个选项的行为相同。 (2认同)