Sie sind hier: Weblog

Entity Framework Performance Tip #3: Daten ohne Änderungsverfolgung laden

Foto ,
05.10.2014 23:13:00

DbContext führt Buch über sämtliche Entitäten, die ihm bekannt sind. Das sind Entitäten, die er geladen oder gespeichert hat, sowie Entitäten, die die Anwendung zum Kontext hinzugefügt (attached) hat. Dazu verwaltet er diese Entitäten mit Zustandsinformationen in einer internen Datenstruktur. Dies erzeugt einen Overhead, der gerade bei der Arbeit mit größeren Datenmengen spürbar wird.

Der Entwickler kann diesen Overhead für Objekte, die er lädt, vermeiden, indem er im Zuge von LINQ-Abfragen die Methode AsNoTracking aufruft:

var hotels = ctx.Hotel.Where(h => h.RegionId == 3).AsNoTracking().ToList();

Dies hat zur Folge, dass der DbContext die Objekte im Zustand detached lädt und somit Änderungen an ihnen nicht erkennt. Möchte der Entwickler solche Objekte speichern, muss er sie zuerst zum DbContext hinzufügen (attached) und ihn anschließend über ihren Zustand informieren.