EF 6 - Cascade Delete на один ко многим без обратной ссылки

У меня есть что-то вроде этого:

public class Gadget {
  public int Id { get; set; }
  public string Name { get; set;}
  public int SuperHeroId { get; set; }
}

public class SuperHero {
  public int Id { get; set; }
  public virtual ICollection<Gadget> Gadgets { get; set; }
}

Обратите внимание, что, хотя гаджет "принадлежит" супергерою (и, следовательно, в базе данных есть FK), моя модель предметной области не имеет жесткой ссылки в этом направлении.

Когда я удаляю супергероя, я хотел бы также удалить все их гаджеты. Как бы я это сделал?

Мое исследование показывает, что если бы у меня была эта ссылка, это было бы что-то вроде

mapping.Entity<SuperHero>()
  .HasMany(x => x.Gadgets)
  .WithRequired(x => x.SuperHero) //this is the part I can't do
  .WillCascadeOnDelete();

но, как уже отмечалось, это не работает с моей моделью предметной области.

1 ответ

Решение
mapping.Entity<SuperHero>()   
       .HasMany(x => x.Gadgets)
       .WithRequired() //use the override that doesn't 
                       //specify a navigation property             
       .WillCascadeOnDelete();

http://msdn.microsoft.com/en-us/library/gg696502(v=vs.113).aspx

Конфигурирует отношение как необязательное: требуется без свойства навигации на другой стороне отношения.

Другие вопросы по тегам