Tipp für ADO.NET Entity Framework: Objekte löschen, ohne sie zu laden

Der Dotnet-Doktor  –  0 Kommentare

Um ein Objekt zu löschen, muss man im ADO.NET Entity Framework die Methode modell.DeleteObject(obj) aufrufen, wobei modell eine Instanz des passenden Entity-Framework-Objektkontextes und obj das zu löschende Objekt ist. DeleteObject() setzt voraus, dass man das Objekt vorher schon geladen hat. Das kann extrem ineffizient sein, wenn man ein Objekt löschen will, dessen Primärschlüssel man kennt, aber den Rest des Objekts gar nicht gebraucht hat.

In dieser Situation gibt es einen Trick: Man konstruiert im RAM ein neues Objekt nur mit dem Primärschlüssel, fügt es dem Kontext mit Attach() hinzu und ruft dann Löschen auf. Der Trick funktioniert, weil das Entity Framework zum Löschen im Standard nur den Primärschlüssel kennen muss.

ACHTUNG: Wenn das Modell aber so eingestellt ist, dass beim Speichern der Wert anderer Spalten verglichen werden soll (Concurrency Mode=Fixed), müssen auch diese Spalten alle befüllt werden!

Beispiel:

//  Löschen ohne Laden
f = new Flug() { FlugNr = flugNr };
modell.Flug.Attach(f);
modell.DeleteObject(f);

Das Beispiel bezieht sich auf die Entität "Flug" aus dem .NET-4.0-Fallbeispiel "World Wide Wings".