簡體   English   中英

EF:多對多級聯刪除

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM