2014-10-08 140 views
3

我有兩個實體應該有多對多的關係。我提供測試數據。EF:多對多級聯刪除

public class A 
{ 
    public int AId {get;set;} 
    public virtual ICollection<B> Bs {get;set;} 
} 

public class B 
{ 
    public int BId {get;set;} 
    public virtual ICollection<A> As {get;set;} 
} 

public class AMap : EntityTypeConfiguration<A> 
{ 
    public AMap() 
    { 
     HasMany(e => e.Bs) 
      .WithMany(e => e.As)     
      .Map(x => 
      { 
       x.ToTable("AandB"); 
       x.MapLeftKey("AId"); 
       x.MapRightKey("BId"); 
      }); 
    } 

} 

在這個配置我需要設置級聯delete.For例如,當我在表A中刪除任何行,我需要在表AandB所有相關行會deleted.But我不能多找語法很多人可以幫助我嗎?

回答

3

搜索後,我發現solution.To許多一對多的關係,你需要負載相關的導航屬性 在我的情況下刪除實體:

var AtoDelete= context.As.Include(a => a.Bs) .First(); //include is mandatory 
context.As.Remove(AtoDelete); 
context.SaveChanges();//deletes will be issued to AandB table also. 
0

據我所知,沒有辦法直接打開流暢API中的多對多關聯級聯刪除。您必須顯式刪除相關實體。

var a = context.A.Include(a => a.Bs).First(); 
foreach(var b in a.Bs) 
{ 
    context.Entry(b).State = EntityState.Deleted; 
} 
context.Entry(a).State = EntityState.Deleted; 
context.SaveChanges();