2016-08-24 3 views
2

Как настроить каскадное удаление в первый проект кода без настройки свойств навигации на [Обязательный] или недействительный?ASP.NET MVC. Как вручную добавить «каскадное удаление» в первое отношение кода?

, например:

class MainClass{ 
    [Key] int id {get;set;} 
    public string name {get;set;} 
    public virtual ICollection<SubItem> subItems {get;set} 
} 

и

Class SubItem{ 
    [Key] int id {get; set;} 
    public string name {get;set;} 
} 

Удаление основного класса должны удалить все связанные с этим подпункты

ответ

1

Для того, каскад удаляет на Nullable внешних ключей через код первого набора вверх, лучший способ достичь этого, вероятно, через Fluent API.

Добавить этот свободный код API к вашему DbContext:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<SubItem>() 
      .HasOptional(o => o.MainClass) 
      .WithMany(m => m.subItems) 
      .HasForeignKey(k => k.MainClassId) 
      .WillCascadeOnDelete(true); 
} 

и ваш класс подэлемента должен быть обновлен с этими свойствами:

Class SubItem 
{ 
    [Key] int id {get; set;} 
    public string name {get;set;} 
    public int? MainClassId { get; set;} 
    public virtual MainClass MainClass { get; set; } 
} 

Я считаю, что если вы удаления элемента MainClass подпунктам ДОЛЖНА быть загружена в контексте (с помощью оператора include при удалении объекта MainClass), который нужно удалить.

, но если вы заходите в свою базу данных и настраиваете этот внешний ключ для включения включенного каскада при удалении, то вам не нужно будет загружать SubItems в контекст, потому что база данных позаботится о том, чтобы каскад удалялся для вас, когда объект MainClass удален.

+0

Я пробовал это, но кажется 1x1, а не 1xMany зависимости. –

+1

@ ДаниэльСантос жаль, у меня было это не так. Я исправил его и обновил ответ на то, как я это делал в прошлом. – JustSomeDude