2017-09-22 12 views
0

私はテーブルを持っている(最初のコード、EF6、SQL Serverの):削除行は

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

私は特別なSrlでテーブル内の行を削除したいとの子のすべてそれ。データベース内のエラーが、何も変更せずに実行している

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

コード:私は、このメソッドを書く

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

:行の子のようなものであってもよいです。どんな身体が私の間違ったことを知っている?

誰でもお勧めしますその行とその子どもをすべて削除する方法はありますか?

+0

問題の完全なエンティティモデルを投稿できますか?現在のところ(ナビゲーションプロパティなし)、関係を定義する方法はわかりません。 –

答えて

1

方法の1つは、子供を見つけた後に削除することができます。

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