PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

MultipleActiveResultSets dla modelu danych encji postgresql i ado.net

Wiele aktywnych zestawów wyników (MARS) to funkcja wprowadzona w SQL Server 2005 i nie jest dostępna w innych systemach baz danych, takich jak postgres, więc nie będzie można jej włączyć w ciągu połączenia.

Błąd, z którym się spotykasz, jest wynikiem próby wykonania dwóch zapytań na jednym otwartym czytniku danych. Podczas korzystania z np. Entity Framework to zazwyczaj dzieje się, gdy masz Lazy Loading włączone, a leniwe właściwości są ładowane w tym samym czytniku, co encje nadrzędne. Na przykład kod podobny do tego może spowodować następujący błąd:

var users = context.Users.Where(u => u.FirstName.StartsWith("Ha"));
foreach (var user in users)
{
    Console.WriteLine(user.Address.StreetName);
}

W pierwszym wierszu nie są pobierane żadne dane, ponieważ przygotowaliśmy tylko zapytanie Linq. Kiedy zaczynamy foreach DataReader jest otwierany i odpytywany jest zbiór użytkowników spełniających nasze warunki, ale czytnik nie jest zamykany. Następnie wewnątrz foreach docieramy do właściwości Address użytkownika, która jest ładowana z opóźnieniem. To leniwe ładowanie powoduje wykonanie zapytania na tym samym otwartym DataReader i wtedy pojawia się wyjątek. Gdybym chciał pozbyć się błędu, mógłbym po prostu dodać ToList() (lub cokolwiek, co powoduje wykonanie zapytania) do końca wiersza w ten sposób:

var users = context.Users.Where(u => u.FirstName.StartsWith("Ha")).ToList();

Mam nadzieję, że to ci pomoże.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak włączyć pracę php z postgresql?

  2. Indeks do znajdowania elementu w tablicy JSON

  3. Węzeł PostgreSQL przeterminował zapytanie klienta

  4. Jak dokonać porównania kanonicznego XML z PostgreSQL?

  5. jsonb LIKE zapytanie dotyczące obiektów zagnieżdżonych w tablicy