2017-04-06 9 views
0

私は3つのネストしたテーブルから削除することに問題があります。ネストしたテーブルからレコードを削除するMVC 5

私が試してみて、最初のテーブルからレコードを削除すると、それは私にエラー

System.Data.SqlClient.SqlException: The DELETE statement conflicted with the REFERENCE constraint

を与える削除アクションメソッドは次のとおりです。

[HttpPost, ActionName("Delete")] 
    [ValidateAntiForgeryToken] 
    public ActionResult DeleteConfirmed(int id) 
    { 
     Parent parent = db.Parent.FirstOrDefault(t => t.ParentID == id); 
     foreach(var item in parent.Child.ToList()) 
     { 
      db.Child.Remove(item); 
      foreach (var grand in item.Grand.ToList()) 
      { 
       db.Grand.Remove(grand); 
      } 
     } 
     db.Parent.Remove(parent); 
     db.SaveChanges(); 
     return RedirectToAction("Index"); 
    } 

私は本当にこの問題上の任意の助けをいただければ幸いです また、人を助けてくれるネストしたテーブルのCRUD操作についてのチュートリアルを私に指示することができます。

+0

まず、質問表からFKを追加する必要があるため、FKを含むすべてのレコードを削除するまで、主キーを削除できないため、質問表からレコードを削除する必要があります。 –

+0

他のテーブルで参照されているデータを削除しようとしています。それはできません。制約を削除するか、データを削除して制約を再作成するか、最初に外部キーによって参照されるデータを削除します。 (FKは外部キーを意味します、それはあなたのエラーメッセージです) – Hyarantar

+0

申し訳ありません、私はこのすべてに新しいです。例が与えられれば、私はそれを感謝します。 – Eyad

答えて

0

これは私は項目を削除の順序を変更するために必要なので、db.Child.Remove(アイテム)がオプションを削除するためのループの後に配置されているHyarantar

public ActionResult DeleteConfirmed(int id) 
{ 
    Parent parent = db.Parent.FirstOrDefault(t => t.ParentID == id); 
    foreach(var item in parent.Child.ToList()) 
    { 
     foreach (var grand in item.Grand.ToList()) 
     { 
      db.Grand.Remove(grand); 
     } 
     db.Child.Remove(item); 
    } 
    db.Parent.Remove(parent); 
    db.SaveChanges(); 
    return RedirectToAction("Index"); 
} 

に作業コードのおかげであります。

関連する問題