2017-04-06 3 views
0

Ich habe Probleme mit dem Löschen von 3 verschachtelten Tabellen, die ich habe.Datensätze aus verschachtelten Tabellen löschen MVC 5

Wenn ich versuche, und einen Datensatz aus der ersten Tabelle löschen, es gibt mir einen Fehler

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

Die Löschaktion Methode ist:

[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"); 
    } 

ich wirklich jede Hilfe zu diesem Problem würde schätzen Wenn mich jemand zu einem Tutorial über CRUD-Operationen für verschachtelte Tabellen anleiten kann, würde mir das sehr helfen.

+0

Zuerst müssen Sie den Datensatz aus der Fragetabelle löschen, weil Sie FK in Fragetabelle hinzufügen, deshalb können Sie den Primärschlüssel nicht löschen, bis Sie alle Einträge löschen, die den FK enthalten. –

+0

Sie versuchen, Daten zu löschen, auf die in anderen Tabellen verwiesen wird: Sie können das nicht tun. Entweder die Einschränkung löschen, Ihre Daten löschen und die Einschränkung neu erstellen ODER die Daten löschen, auf die der Fremdschlüssel zuerst verweist. (FK bedeutet Foreign Key, das ist Ihre Fehlermeldung) – Hyarantar

+0

Es tut mir leid, ich bin neu in all dem. Wenn ein Beispiel zur Verfügung gestellt werden könnte, werde ich es zu schätzen wissen. – Eyad

Antwort

0

Dies ist der Arbeits Code dank 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"); 
} 

ich nur die Reihenfolge des ändern, um die Elemente zu entfernen musste, so db.Child.Remove (Artikel) wird zum Löschen der Optionen nach der Schleife gelegt .

Verwandte Themen