EF7 RC1:禁用级联删除

Adr*_*ant 23 entity-framework-core

在昨天发布的EntityFramework 7的RC1中,添加了Cascade Delete.

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

      builder.Entity<Site>().HasOne(e => e.Person)
      .WithMany(x => x.Sites).Metadata.DeleteBehavior = DeleteBehavior.Restrict;
Run Code Online (Sandbox Code Playgroud)

我想为DbContext全局禁用它,但我找不到方法.我能怎么做 ?

Adr*_*ant 26

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

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


nat*_*ter 11

现在的约定是不可配置的.当前的CascadeDelete约定仅适用于所需的关系.关系约定: efproject.net上的级联删除(官方EF7文档)如果您了解后果,可以明确禁用所需的关系.

        modelBuilder.Entity<Site>()
            .HasOne(p => p.Person)
            .WithMany(b => b.Sites)
            .IsRequired(false);
Run Code Online (Sandbox Code Playgroud)

否则(和推荐),您需要显式设置On Delete行为(如您所发现的那样).

        modelBuilder.Entity<Site>()
            .HasOne(p => p.Person)
            .WithMany(b => b.Sites)
            .OnDelete(DeleteBehavior.Restrict);
Run Code Online (Sandbox Code Playgroud)