Множество активни набори от резултати (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);
}
В първия ред не се извличат данни, тъй като сме подготвили само Linq заявка. Когато стартираме foreach
DataReader
се отваря и колекцията от потребители, която отговаря на нашите условия, се запитва, но четецът не се затваря. След това вътре в foreach
стигаме до свойството Address на User, което се зарежда отложено. Това отложено зареждане причинява изпълнение на заявка на същия отворен DataReader
и тогава възниква изключението. Ако исках да се отърва от грешката, можех просто да добавя ToList()
(или нещо, причиняващо изпълнението на заявката) до края на реда по този начин:
var users = context.Users.Where(u => u.FirstName.StartsWith("Ha")).ToList();
Надяваме се, че това ще ви помогне.