我需要了解全局禁用EF Core 2
中的级联删除的方法。任何帮助都适用。
在EF 6.x中,我们使用以下代码在OneToMany
和ManyToMany
实境上禁用级联删除:
builder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
builder.Conventions.Remove<ManyToManyCascadeDeleteConvention>();
最佳答案
不幸的是,当前的EF Core(当前最新版本为v2.0)没有提供一种很好的方法来全局控制这些约定。
默认的EF Core 2.0约定是对必需关系使用DeleteBehavior.Cascade
,对可选关系使用DeleteBehavior.ClientSetNull
。我可以建议的解决方法是在OnModelCreating
覆盖结尾处的典型元数据模型循环。在这种情况下,找到所有已经发现的关系并进行相应的修改:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
// ...
var cascadeFKs = modelBuilder.Model.GetEntityTypes()
.SelectMany(t => t.GetForeignKeys())
.Where(fk => !fk.IsOwnership && fk.DeleteBehavior == DeleteBehavior.Cascade);
foreach (var fk in cascadeFKs)
fk.DeleteBehavior = DeleteBehavior.Restrict;
base.OnModelCreating(modelBuilder);
}
关于entity-framework - 全局禁用EF Core 2上的级联删除,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46526230/