0

Ich arbeite in ASP.NET 4.6 mit EF 6 zu einem neuen Web Api 2 Projekt, ich habe eine Menge Artikel gelesen, die das async/erwarten Muster beschreibt und es ist Klar, dass dieses Muster für viele Anfragen die Performance aus vielen Gründen erhöht. Also entschied ich mich, es zum ersten Mal zu benutzen. In beschlossen, ein Biz-Projekt und ein DAL-Projekt hier ein Beispiel zu erstellen.Entity Framework 6 async/erwarten Fehler in paralleler Anfrage

Dies ist Controller-Methode:

[HttpGet] 
public async Task<bool> CheckValueValidity(string value, string type) 
{ 
    return await _accountsBiz.CheckValueTypeValidity(value, type); 
} 

I Beispiel biz Objekt in Controller-Konstruktor.

Dies ist der BIZ:

public async Task<bool> CheckValueTypeValidity(string value, string type) 
    { 
     bool isValid = false; 
     switch (type.ToLower()) 
     { 
      case "email": 
       isValid = await _accountsRepository.CheckEmailValidity(value); 
       break; 
      case "username": 
       isValid = await _accountsRepository.CheckUserNameValidity(value); 
       break; 
     } 
     return isValid; 
    } 

ich Instanz des Repository im BIZ-Konstruktor.

Schließlich ist dies die DAL-Methode:

public async Task<bool> CheckEmailValidity(string email) 
    { 
     using(MyEntities db = new MyEntities()) 
     { 
      return await db.AspNetUsers.CountAsync(u => u.Email == email) > 0 ? false : true; 
     } 
    } 

Und es perfekt zu funktionieren scheint, bis ich zwei Anfrage zur gleichen Zeit bildeten, eine dieser Rück den korrekten Wert der andere

sagen Eine zweite Operation wurde in diesem Kontext gestartet, bevor eine vorherige asynchrone Operation abgeschlossen wurde. Verwenden Sie 'abwarten', um sicherzustellen, dass alle asynchronen Vorgänge abgeschlossen sind, bevor Sie eine andere Methode in diesem Kontext aufrufen. Es ist nicht garantiert, dass alle Instanzmitglieder Thread-sicher sind.

Ich habe die Anfragen von zwei verschiedenen Clients, so dass der Kontext anders sein sollte. sollte ....

Ich weiß nicht, wie es zu beheben ist. Ich lese viel und mein Code scheint korrekt zu sein.

Die Frage ist, warum diesen Fehler werfen? Ich kann nicht verstehen

Vielen Dank für Hilfe in der Beratung.

Antwort

0

Ok der Fehler in der Ausführung gibt es eine Methode, die DbContext ohne using Block verwenden .... Mein Fehler, aber jetzt ist es klar, dass Kontext jeder Anfrage entsorgt werden muss!