Несколько активных наборов результатов (MARS) - это функция, представленная в SQL Server 2005, которая недоступна в других системах баз данных, таких как postgres, поэтому вы не сможете включить ее в строке соединения.
Ошибка, с которой вы столкнулись, является результатом попытки выполнить два запроса для одного открытого считывателя данных.При использовании т.е. Entity Framework это обычно происходит, когда у вас включена Ленивая загрузка и свойства отложенной загрузки загружаются в тот же читатель, что и родительские объекты.Например, код, подобный этому, может привести к этой ошибке:
var users = context.Users.Where(u => u.FirstName.StartsWith("Ha"));
foreach (var user in users)
{
Console.WriteLine(user.Address.StreetName);
}
В 1-й строке данные не выбираются, так как мы только подготовили запрос Linq.Когда мы запускаем, foreach
открывается DataReader
и запрашивается коллекция пользователей, которая отвечает нашим условиям, но читатель не закрывается.Затем внутри foreach
мы достигаем свойства Address пользователя, которое загружается лениво.Эта ленивая загрузка вызывает выполнение запроса на том же открытом DataReader
, и именно тогда возникает исключение.Если бы я хотел избавиться от ошибки, я мог бы просто добавить ToList()
(или что-то, что заставляет выполнить запрос) в конец строки, например:
var users = context.Users.Where(u => u.FirstName.StartsWith("Ha")).ToList();
Надеюсь, это поможет вам.