Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

EF 6 — Jak poprawnie wykonywać zapytania równoległe

Problem polega na tym:

EF nie obsługuje przetwarzania wielu żądań za pośrednictwem tego samego obiektu DbContext. Jeśli drugie żądanie asynchroniczne w tym samym wystąpieniu DbContext rozpocznie się przed zakończeniem pierwszego żądania (i to cały punkt), otrzymasz komunikat o błędzie, że żądanie jest przetwarzane względem otwartego DataReader.

Źródło:https://visualstudiomagazine.com/articles/2014/04/01/async-processing.aspx

Będziesz musiał zmodyfikować swój kod w taki sposób:

async Task<List<E1Entity>> GetE1Data()
{
    using(var MyCtx = new MyCtx())
    {
         return await MyCtx.E1.Where(bla bla bla).ToListAsync();
    }
}

async Task<List<E2Entity>> GetE2Data()
{
    using(var MyCtx = new MyCtx())
    {
         return await MyCtx.E2.Where(bla bla bla).ToListAsync();
    }
}

async Task DoSomething()
{
    var t1 = GetE1Data();
    var t2 = GetE2Data();
    await Task.WhenAll(t1,t2);
    DoSomething(t1.Result, t2.Result);
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Użyj TYPEPROPERTY(), aby zwrócić informacje o typie danych w SQL Server

  2. Użyj NEWID(), aby utworzyć unikalną wartość w SQL Server

  3. Jak odwoływać się do kluczy JSON zawierających znaki specjalne podczas korzystania z OPENJSON, JSON_QUERY i JSON_VALUE (SQL Server)

  4. Dodatek Service Pack 1 dla programu SQL Server 2012 i aktualizacja zbiorcza 1

  5. Jak wyłączyć CDC w zestawie tabel LUB wyłączyć we wszystkich tabelach w bazie danych w programie SQL Server — samouczek dotyczący programu SQL Server