EF Core's .AsNoTracking()
und Datenbankschreibvorgänge: Eine Klarstellung
Entity Framework Core (EF Core) bietet .AsNoTracking()
die Möglichkeit, Abfragen durch Deaktivierung der Änderungsverfolgung zu optimieren. Dies ist von Vorteil, wenn Sie Daten nur lesen müssen und nicht beabsichtigen, sie im aktuellen Kontext zu ändern. Die Auswirkungen auf spätere Updates müssen jedoch sorgfältig abgewogen werden.
Ihr Beispiel verdeutlicht einen häufigen Punkt der Verwirrung:
Szenario: Mithilfe eines Kontexts pro Anfrage rufen Sie zunächst einen Benutzer mit .AsNoTracking()
ab und versuchen dann, denselben Benutzer zu aktualisieren.
Schritt 1: context.Set<user>().AsNoTracking()
ruft einen Benutzer ohneTracking ab.
Schritt 2: context.Set<user>()
versucht, den nicht verfolgten Benutzer zu aktualisieren.
Der entscheidende Unterschied:
Der Hauptunterschied zwischen der Verwendung von .AsNoTracking()
und der Nichtverwendung liegt darin, wie EF Core den Zustand der Entität verwaltet.
Ohne .AsNoTracking()
: EF Core verfolgt die Entität. Wenn Sie aktualisieren und speichern, erkennt EF Core die Änderungen automatisch und aktualisiert die Datenbank entsprechend. Dies ist der einfachere und unkompliziertere Ansatz, wenn Sie beabsichtigen, die Entität zu ändern.
Mit .AsNoTracking()
: Die Entität wird nicht verfolgt. EF Core weiß nichts von den Änderungen, die Sie vornehmen. Um die Datenbank zu aktualisieren, müssen Sie die Entität explizit mit context.Entry(user).State = EntityState.Modified;
an den Kontext anhängen, bevor Sie context.SaveChanges()
aufrufen. Andernfalls wird wahrscheinlich ein neuer Datensatz eingefügt, anstatt den vorhandenen zu aktualisieren.
Kurz gesagt: .AsNoTracking()
bietet Leistungssteigerungen für schreibgeschützte Vorgänge. Vermeiden Sie bei Aktualisierungsvorgängen entweder .AsNoTracking()
beim ersten Abruf oder seien Sie darauf vorbereitet, den Status der Entität innerhalb des Kontexts manuell zu verwalten, bevor Sie Änderungen speichern. Die Wahl hängt von Ihren spezifischen Anforderungen ab und davon, ob Sie Leistung oder einfacheren Code priorisieren.
Das obige ist der detaillierte Inhalt vonBeeinflusst „.AsNoTracking()' von EF Core Datenbankschreibvorgänge beim Aktualisieren von Entitäten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!