Tipps und Tricks rund um .NET und Visual Studio

ADO.NET Entity Framework Objekte löschen ohne sie vorher zu laden
Kommentare

Dr. Holger Schwichtenberg und Manfred Steyer zeigen, wie man beim mit dem ADO.NET Entity Framework Objekte löschen kann, ohne sie vorher zu laden.

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-Objektkontexts 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. 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 gefüllt werden:

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

Dr. Holger Schwichtenberg (MVP) und FH-Prof. Manfred Steyer arbeiten bei http://www.IT-Visions.de als Softwarearchitekten, Berater und Trainer für .NET-Technologien. Dabei unterstützen sie zahlreiche Unternehmen beim Einsatz von .NET und entwickeln selbst in größeren Projekten. Sie haben zahlreiche Fachbücher geschrieben und gehören seit vielen Jahren zu den Hauptsprechern auf der BASTA. Manfred Steyer ist zudem verantwortlich für den Fachbereich „Software Engineering“ der Studienrichtung „IT und Wirtschaftsinformatik“ an der FH CAMPUS 02 in Graz. Dr. Holger Schwichtenberg unterrichtet in Lehraufträgen an den Fachhochschulen Münster und Graz.

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -