Entity Framework + Mehrere Threads + Lazy Load

8

Ich habe Probleme mit Entity Framework und mehreren Threads und frage mich, ob es eine Lösung gibt, die die Fähigkeit zum verzögerten Laden hält. Aus meiner Sicht ist der Datenkontext nicht Thread-sicher, weshalb, wenn ich mehrere Threads mit dem gleichen Datenkontext habe, bekomme ich verschiedene Datenleser Fehler. Die Lösung für dieses Problem besteht darin, für jede Verbindung zur Datenbank einen separaten Datenkontext zu verwenden und anschließend den Datenkontext zu zerstören. Leider kann ich den Datenkontext nicht mehr löschen, wenn ich den Datenkontext zerstöre.

Gibt es ein Muster, das es mir erlaubt, in meiner Anwendung einen gemeinsamen Kontext zu haben, aber trotzdem mehrere Threads richtig zu behandeln?

    
David Osborn 24.08.2011, 13:33
quelle

1 Antwort

9

Nein, es gibt keine solche Lösung. Ihre Auswahlmöglichkeiten in Multithread-Anwendungen sind:

  • Kontext pro Thread
  • Einzelkontext, der unproxied detached entities erzeugt (kein Lazy Loading, kein Change tracking) mit Synchronisation für jeden Zugriff auf diesen Kontext.

Wenn Sie den zweiten Ansatz mit verbundenen Instanzen ausführen, ist das eine Katastrophe. Es würde erforderlich sein, alle versteckten Interaktionen mit dem Kontext zu erkennen und verwandten Code ebenfalls zu synchronisieren. Sie werden wahrscheinlich mit Single-Thread-Prozess enden, der in mehreren Switching-Threads abläuft.

    
Ladislav Mrnka 24.08.2011, 13:43
quelle