Подтвердить что ты не робот

EF7 RC1: отключить каскадное удаление

В RC1 EntityFramework 7, выпущенном вчера, добавлен Cascade Delete.

Чтобы отключить его для каждой связи, я могу использовать:

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

Я хочу отключить его глобально для DbContext, но я не нашел пути. Как я могу сделать?

4b9b3361

Ответ 1

Кто-то заявил на форуме проекта github, что единственный способ сделать это прямо сейчас - перебрать все отношения в методе OnModelCreating(ModelBuilder builder) и установить для свойства DeleteBehavior значение DeleteBehavior.Restrict:

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

Ответ 2

В настоящее время соглашения не настраиваются. Текущее соглашение CascadeDelete применимо только к обязательным отношениям. Соглашения о связях: Каскадное удаление на efproject.net(Официальные документы EF7) Вы можете явно отключить требуемые отношения, если вы хорошо понимаете последствия.

        modelBuilder.Entity<Site>()
            .HasOne(p => p.Person)
            .WithMany(b => b.Sites)
            .IsRequired(false);

В противном случае (и рекомендуется) вам необходимо явно установить поведение On Delete (как вы уже обнаружили).

        modelBuilder.Entity<Site>()
            .HasOne(p => p.Person)
            .WithMany(b => b.Sites)
            .OnDelete(DeleteBehavior.Restrict);