Heim >Backend-Entwicklung >C++ >EF Core AsNoTracking(): Wann sind Updates wichtig?
.AsNoTracking() in EF Core: Detaillierte Erklärung und Auswirkungen von Updates
Die .AsNoTracking()
-Methode in EF Core ist oft verwirrend, insbesondere für Anfänger. Um seine Rolle zu veranschaulichen, analysieren wir ein bestimmtes Szenario und seine Auswirkungen auf Datenbankinteraktionen.
Gehen Sie davon aus, dass die Entitäten der Website in einem Kontext pro Anfrage gespeichert werden. Viele Entitäten bleiben unverändert und müssen nicht nachverfolgt werden. Das folgende Szenario stellt jedoch eine schwierige Frage dar:
<code class="language-csharp">context.Set<User>().AsNoTracking() // 步骤 1) 获取用户 context.Set<User>() // 步骤 2) 更新用户</code>
Alternativ können wir .AsNoTracking()
aus Schritt 1 entfernen:
<code class="language-csharp">context.Set<User>(); // 步骤 1) 获取用户 context.Set<User>() // 步骤 2) 更新用户</code>
In beiden Fällen wird der Kontext zum Abrufen (Schritt 1) und Aktualisieren (Schritt 2) verwendet, sie erfolgen jedoch zu unterschiedlichen Zeiten. Die Frage ist: Macht es einen Unterschied?
Die Antwort liegt in der Natur des Trackings. Im ersten Szenario verwendet Schritt 1 .AsNoTracking()
, der abgerufene Benutzer wird nicht vom Kontext verfolgt. Das bedeutet, dass Sie beim Aktualisieren eines Benutzers (Schritt 2) den Benutzer manuell anhängen und seinen Status explizit auf „Geändert“ setzen müssen. Dadurch wird EF Core angewiesen, den vorhandenen Benutzer zu aktualisieren, anstatt einen neuen Datensatz zu erstellen.
Im Gegensatz dazu müssen Sie im zweiten Fall ohne .AsNoTracking()
diese manuellen Schritte nicht ausführen, wenn Sie den Benutzer in derselben Kontextinstanz laden und speichern. Der Tracking-Mechanismus erledigt dies automatisch und bedient aktualisierte Benutzer ohne zusätzliche Konfiguration.
Zusammenfassend lässt sich sagen, dass der Unterschied zwischen diesen beiden Methoden darin besteht, dass .AsNoTracking()
die Nachverfolgung abgerufener Entitäten deaktiviert wird und eine manuelle Verwaltung des Objektstatus und der Anhänge während Aktualisierungen erforderlich ist. Die Verwendung desselben Kontexts zum Abrufen und Aktualisieren ohne .AsNoTracking()
vereinfacht diesen Prozess, da der Tracking-Mechanismus diese Aspekte transparent behandelt.
Das obige ist der detaillierte Inhalt vonEF Core AsNoTracking(): Wann sind Updates wichtig?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!