Multiple Active Result Sets (MARS) er en funktion introduceret i SQL Server 2005 og er ikke tilgængelig i andre databasesystemer som postgres, så du vil ikke være i stand til at slå den til i forbindelsesstrengen.
Den fejl, du står over for, er et resultat af at forsøge at udføre to forespørgsler på en åben datalæser. Når du bruger f.eks. Entity Framework dette normalt sker, når du har Lazy Loading slået til, og de dovne egenskaber indlæses i den samme læser som den overordnede enhed. For eksempel kunne en kode, der ligner denne, producere denne fejl:
var users = context.Users.Where(u => u.FirstName.StartsWith("Ha"));
foreach (var user in users)
{
Console.WriteLine(user.Address.StreetName);
}
I 1. linje hentes ingen data, da vi kun har udarbejdet en Linq-forespørgsel. Når vi starter foreach
en DataReader
er åbnet, og en samling af brugere, der opfylder vores betingelser, bliver spurgt, men læseren er ikke lukket. Derefter inde i foreach
vi når til Brugerens Adresse-egenskab, som er ladet indlæst. Denne dovne belastning forårsager en forespørgselskørsel på den samme åbne DataReader
og det er her, undtagelsen opstår. Hvis jeg ville slippe af med fejlen, kunne jeg blot tilføje en ToList()
(eller noget, der får forespørgslen til at udføre) til slutningen af linjen som denne:
var users = context.Users.Where(u => u.FirstName.StartsWith("Ha")).ToList();
Håber dette vil hjælpe dig.