Entity framework core EF7 RC1:禁用级联删除

Entity framework core EF7 RC1:禁用级联删除,entity-framework-core,Entity Framework Core,在昨天发布的EntityFramework 7的RC1中,添加了级联删除 要按关系禁用它,我可以使用: builder.Entity<Site>().HasOne(e => e.Person) .WithMany(x => x.Sites).Metadata.DeleteBehavior = DeleteBehavior.Restrict; builder.Entity().HasOne(e=>e.Person) .WithMany(x=>x.S

在昨天发布的EntityFramework 7的RC1中,添加了级联删除

要按关系禁用它,我可以使用:

      builder.Entity<Site>().HasOne(e => e.Person)
      .WithMany(x => x.Sites).Metadata.DeleteBehavior = DeleteBehavior.Restrict;
builder.Entity().HasOne(e=>e.Person)
.WithMany(x=>x.Sites).Metadata.DeleteBehavior=DeleteBehavior.Restrict;

我想为DbContext全局禁用它,但没有找到方法。我该怎么办?

目前无法配置约定。当前的级联删除约定仅适用于。在efproject.net(官方EF7文档)上,如果您非常了解其后果,则可以显式禁用所需的关系

        modelBuilder.Entity<Site>()
            .HasOne(p => p.Person)
            .WithMany(b => b.Sites)
            .IsRequired(false);
modelBuilder.Entity()
.HasOne(p=>p.Person)
.有许多(b=>b.站点)
.i被要求(虚假);
否则(建议),您需要显式设置On Delete行为(正如您已经发现的)

modelBuilder.Entity()
.HasOne(p=>p.Person)
.有许多(b=>b.站点)
.OnDelete(DeleteBehavior.Restrict);

有人在github项目论坛上表示,现在唯一的方法是迭代ModelCreating(ModelBuilder builder)方法中的所有关系,并将
DeleteBehavior
属性设置为
DeleteBehavior.Restrict

        foreach (var relationship in builder.Model.GetEntityTypes().SelectMany(e => e.GetForeignKeys()))
        {
            relationship.DeleteBehavior = DeleteBehavior.Restrict;
        }

如果未对模型类中的属性使用
Required
,则默认情况下会将其生成为
DeleteBehavior.Restrict
。如果要使用
DeleteBehavior.Cascade
,请使用
Required
。您可以通过使用with/without Required生成虚拟迁移来看到这一点。

OnDelete(DeleteBehavior.Restrict)是否与EF6 willcascade OnDelete(False)相同?我问这个问题是因为我有DeleteBehavior.Restrict在我的一些模型上,但是当我在SQL Server中生成DB模式时,我看到模式中的SQL:on DELETE CASCADE-->表示级联
        foreach (var relationship in builder.Model.GetEntityTypes().SelectMany(e => e.GetForeignKeys()))
        {
            relationship.DeleteBehavior = DeleteBehavior.Restrict;
        }