簡體   English   中英

在實體框架中刪除父子表中的行

[英]remove row in parent-child table in Entity framework

我有一張表(代碼優先,EF6,SQL Server):

public int Srl { get; set; }
public StringName{ get; set; }
public Nullable<int> Parent { get; set; }

我想刪除帶有特殊Srl及其所有子項的表中的一行。 請注意,一行的子級可能類似於:

row->
    Child1->
            Child1-1
    Child2->
    Child3->
           Child3-1
           Child3-2->
                   Child3-2-1
    Child4

我寫這個方法:

private void DeleteObjectAndChildren(int id)
        {
            var menu = db.Menus.Where(m => m.Parent == id).ToList();
            foreach (var item in menu)
            {
                var child = db.Menus.Where(m => m.Parent == item.Srl).ToList();

                if (child.Count != 0)
                {
                    DeleteObjectAndChildren(item.Srl);
                }
                else
                {
                    db.Menus.Remove(item);
                }
            }
            db.SaveChanges();
        }

代碼運行沒有錯誤,但是數據庫中沒有任何變化。 有人知道我怎么了嗎?

有人能建議更好的方法刪除行及其所有子級嗎?

其中一種方法,您可以在找到子代之后將其刪除。

MyDbContext db = new MyDbContext();
public List<Menus> GetChildren(int id)
{
    return db.Menus.Where(i => i.Parent == id || i.Id == id).ToList().Union(db.Menus.Where(i => i.Parent == id).ToList().SelectMany(i => GetChildren(i.Id)).ToList()).ToList();            
}
public void DeleteMenus(int id)
{
    GetChildren(id).ForEach(i => db.Entry(i).State = System.Data.Entity.EntityState.Deleted);
    db.SaveChanges();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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