Heim >Backend-Entwicklung >C++ >Warum gibt mein Entity Framework-Code die Meldung „Neue Transaktion ist nicht zulässig, da in der Sitzung andere Threads ausgeführt werden' aus?
Transaktionsfehler beim Aktualisieren von Entity Framework-Modellen
Beim Versuch, Entitäten aus zwei separaten Datenbanken zu verbinden, stoßen Entwickler möglicherweise auf den Fehler: „Neu.“ Die Transaktion ist nicht zulässig, da in der Sitzung andere Threads ausgeführt werden. Diese verwirrende Meldung kann auftreten, wenn Code versucht wird, der mehrere Schleifen und Entity Framework-Kontexte enthält.
Das zugrunde liegende Problem ergibt sich aus der Tatsache, dass Entity Framework (EF) für jeden erstellten Kontext eine Sitzung verwaltet. Wenn mehrere Threads gleichzeitig auf denselben Kontext zugreifen, kann es zu Transaktionskonflikten kommen. Um dieses Problem zu beheben, ist es wichtig, zu vermeiden, dass derselbe Kontext in verschiedenen Threads geändert wird.
Im bereitgestellten Beispiel war die Hauptursache des Fehlers die Verwendung verschachtelter foreach-Schleifen über EF-Abfragen. Dieser Ansatz bedeutete, dass für jede Iteration der äußeren Schleife ein neuer EF-Kontext erstellt wurde, was dazu führte, dass zahlreiche aktive Sitzungen gleichzeitig auf denselben Kontext zugreifen.
Die optimale Lösung besteht darin, Daten mithilfe einer Abfrage aus EF abzurufen und zu speichern in einer Zwischensammlung (z. B. IList
Hier ist ein Beispiel des geänderten Codes zur Veranschaulichung:
IList<Client> clientList = from a in _dbFeed.Client.Include("Auto") select a; foreach (RivWorks.Model.NegotiationAutos.Client client in clientList) { var companyFeedDetailList = from a in _dbRiv.AutoNegotiationDetails where a.ClientID == client.ClientID select a; // ... }
Durch die Isolierung des Durch den Abruf von Daten aus dem Kontext eliminieren wir das Risiko sich überschneidender Transaktionen und stellen sicher, dass keine Fehler auftreten.
Das obige ist der detaillierte Inhalt vonWarum gibt mein Entity Framework-Code die Meldung „Neue Transaktion ist nicht zulässig, da in der Sitzung andere Threads ausgeführt werden' aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!