Multiple Active Result Sets (MARS) är en funktion som introduceras i SQL Server 2005 och är inte tillgänglig i andra databassystem som postgres så du kommer inte att kunna aktivera den i anslutningssträngen.
Felet du står inför är ett resultat av att du försöker utföra två frågor på en öppen dataläsare. När du använder t.ex. Entity Framework detta vanligtvis händer när du har Lazy Loading aktiveras och de lata egenskaperna laddas i samma läsare som den överordnade enheten. En kod som liknar denna kan till exempel ge detta fel:
var users = context.Users.Where(u => u.FirstName.StartsWith("Ha"));
foreach (var user in users)
{
Console.WriteLine(user.Address.StreetName);
}
I den första raden hämtas ingen data då vi bara har förberett en Linq-fråga. När vi startar foreach
en DataReader
öppnas och en samling av användare som uppfyller våra villkor efterfrågas men läsaren är inte stängd. Sedan inuti foreach
vi når användarens adressegenskap som är lata laddad. Denna lata laddning orsakar att en fråga körs på samma öppna DataReader
och det är då undantaget inträffar. Om jag ville bli av med felet kunde jag helt enkelt lägga till en ToList()
(eller något som gör att frågan utförs) till slutet av raden så här:
var users = context.Users.Where(u => u.FirstName.StartsWith("Ha")).ToList();
Hoppas detta hjälper dig.