[英]EF:Many to many cascade delete
我有兩個實體應該有多對多的關系。我提供測試數據。
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");
});
}
}
在這個配置中我需要設置級聯刪除。例如,當我刪除表A中的任何行時,我需要刪除表AandB中的所有相關行。但是我找不到很多對很多的語法。任何人都可以幫助我嗎?
搜索后我找到了解決方案。要從多對多關系中刪除實體,您需要加載相關的導航屬性在我的情況下:
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.
據我所知,沒有辦法在流暢的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();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.