Wie verhindert man EntityFramework-Deadlock, wenn diese beiden Anweisungen gleichzeitig ausgeführt werden?

8

Anrufe in meinen Web-Service verwenden den folgenden Code, um sicherzustellen, dass der Anrufer eine gültige Sitzung hat. Wenn eine gültige Sitzung gefunden wurde, aktualisiert sie die Sitzungsdetails und speichert die Änderungen. Alles einfach genug und funktioniert gut.

%Vor%

Alles funktioniert gut, bis derselbe Anrufer und damit dieselbe Sitzung mehrere gleichzeitige Anrufe tätigt (was vollkommen korrekt ist). In diesem Fall bekomme ich manchmal einen Stillstand. Mit SQL Server Profiler kann ich Folgendes feststellen.

Anrufer A führt die Auswahl durch und erwirbt eine gemeinsame Sperre für die Benutzersitzung. Anrufer B führt die Auswahl aus und erwirbt eine gemeinsame Sperre für dieselbe Benutzersitzung. Anrufer A kann seine Aktualisierung aufgrund der gemeinsamen Sperre von Anrufer B nicht durchführen. Anrufer B kann aufgrund der freigegebenen Sperre von Anrufer A seine Aktualisierung nicht durchführen. Deadlock.

Dies scheint ein einfaches und klassisches Deadlock-Szenario zu sein und es muss eine einfache Methode geben, um es zu lösen. Sicherlich haben fast alle Anwendungen der realen Welt das gleiche Problem. Aber in keinem der Entity Frameworks-Bücher habe ich irgendetwas über Deadlocks erwähnt.

    
Phil Wright 27.10.2012, 04:13
quelle

2 Antworten

11

Ich habe einen Artikel gefunden, in dem darüber gesprochen wird HIER . Es klingt im Grunde so, als könnten Sie eine Transaktion starten und stoppen, die Ihren EF-Aufruf umgibt ... Der Block gibt das folgende Codebeispiel, so dass Diego B Vega gutgeschrieben wird ... Der Blogbeitrag enthält auch Links zu einem anderen Blog mit zusätzlichen Informationen. p> %Vor%     

Jared 27.10.2012, 04:34
quelle
1

Funktioniert das Folgende für Sie?

%Vor%     
user2337812 15.08.2013 23:56
quelle

Tags und Links