Afs*_*bbi 21 entity-framework entity-framework-core
我需要了解在EF Core 2
全局范围内禁用级联删除的方法.任何帮助都是适当的.
在EF 6.x中,我们使用以下代码来禁用对两者OneToMany
和ManyToMany
现实的级联删除:
builder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
builder.Conventions.Remove<ManyToManyCascadeDeleteConvention>();
Run Code Online (Sandbox Code Playgroud)
Iva*_*oev 46
不幸的是,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);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8274 次 |
最近记录: |