EF7 RC1: отключить каскадное удаление
В RC1 EntityFramework 7, выпущенном вчера, добавлен Cascade Delete.
Чтобы отключить его для каждой связи, я могу использовать:
builder.Entity<Site>().HasOne(e => e.Person)
.WithMany(x => x.Sites).Metadata.DeleteBehavior = DeleteBehavior.Restrict;
Я хочу отключить его глобально для DbContext, но я не нашел пути. Как я могу сделать?
Ответы
Ответ 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);