2017-11-21 5 views
0

In meiner Datenbank habe ich eine übergeordnete Tabelle und eine untergeordnete Tabelle mit Fremdschlüssel, der auf den übergeordneten verweist .. an einem bestimmten Punkt muss ich alle Zeilen aus beiden Tabellen löschen.LINQ to Entity: truncate Tabelle schlägt wegen Fremdschlüsseleinschränkung fehl

habe ich den folgenden Code in Entity Framework:

using (MuseumDBEntities db = new MuseumDBEntities()) 
{ 
    db.Database.ExecuteSqlCommand("truncate table childTable"); 
    db.Database.ExecuteSqlCommand("truncate table parentTable"); 
} 

ich eine Ausnahme bei der zweiten truncate bekommen, weil der Fremdschlüssel, obwohl ich das erste Kind Tisch bin zu löschen.

Was soll ich tun? Gibt es eine andere Möglichkeit, alle Zeilen beider Tabellen zu löschen?

Ich weiß nicht, ob eine foreach-Schleife über alle Zeilen praktisch ist.

Antwort

0

Das ist SQL Server Schuld!

Sie haben zwei Möglichkeiten, um Ihr Ziel zu erreichen:

  1. die Fremdschlüssel fallen lassen, dann die Tabelle gestutzt und dann den Fremdschlüssel neu erstellen (I nicht empfehlen, diese Lösung zu tun, weil es zu ist viel Arbeit und in der Regel nicht wert)

  2. Statt Truncate Verwendung Delete (I in der Regel mit dieser Methode)

Ihr Code wird wie folgt aussehen:

using (MuseumDBEntities db = new MuseumDBEntities()) 
{ 
    db.Database.ExecuteSqlCommand("Delete from childTable"); 
    db.Database.ExecuteSqlCommand("Delete from parentTable"); 
} 

Da die beiden Lösch Aussagen keine Bedingungen haben (keine where Klausel), werden alle Zeilen aus den Tabellen gelöscht werden.

Verwandte Themen