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.