4

У меня есть что-то вроде этого:EF 6 - Каскадное удаление на один ко многим без обратной ссылки

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(); 

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

+0

Вы не можете создать твердую ссылку? –

+0

Нет - В моем случае это было бы плохой дизайн. –

ответ

10
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

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

+0

peerfect, work's great – avicohh