Entity Framework Core: Lösung „Ein zweiter Vorgang wurde in diesem Kontext gestartet, bevor ein vorheriger Vorgang abgeschlossen wurde“
Die Fehlermeldung „Ein zweiter Vorgang „In diesem Kontext gestartet, bevor ein vorheriger Vorgang abgeschlossen wurde“ in Entity Framework Core weist normalerweise darauf hin, dass mehrere Threads gleichzeitig versuchen, auf dieselbe DbContext-Instanz zuzugreifen. Dies kann auftreten, wenn der DbContext als bereichsbezogener Dienst registriert ist, der für jede Anfrage eine neue Instanz erstellt.
Umfang der DbContext-Registrierung
Standardmäßig Entity Framework Core Registriert den DbContext als bereichsbezogenen Dienst. Dies bedeutet, dass für jede HTTP-Anfrage oder jeden bereichsbezogenen Dienst eine neue Instanz des DbContext erstellt wird. In einer Multithread-Umgebung kann dies zu der betreffenden Fehlermeldung führen.
Transiente DbContext-Registrierung
Um dieses Problem zu beheben, wird empfohlen, den DbContext als zu registrieren vorübergehender Dienst. Dadurch wird sichergestellt, dass für jeden einzelnen Request-Handler eine neue Instanz erstellt wird:
services.AddTransient<MyContext>();
Alternativ können Sie ServiceLifetime.Transient verwenden:
services.AddDbContext<MyContext>(ServiceLifetime.Transient);
Nachteil der Transient-Registrierung
Das Registrieren des DbContext als transient hat seine Nachteile. Vom Kontext verwaltete Entitäten können nicht über mehrere Methodenaufrufe oder Klassen hinweg beibehalten werden, die dieselbe DbContext-Instanz verwenden.
Andere mögliche Ursachen
Zusätzlich zur vorübergehenden DbContext-Registrierung auch andere Mögliche Fehlerursachen sind:
Zusätzliche Informationen
Weitere Details zur DbContext-Lebensdauer und Thread-Sicherheit finden Sie in der Entity Framework Core-Dokumentation:
Das obige ist der detaillierte Inhalt vonWie behebt man „Ein zweiter Vorgang wurde in diesem Kontext gestartet, bevor ein vorheriger Vorgang abgeschlossen wurde' in Entity Framework Core?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!