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
Конфигурирует отношение как необязательное: требуется без свойства навигации на другой стороне отношения.