Multiple Active Result Sets (MARS) je funkce představená v SQL Server 2005 a není dostupná v jiných databázových systémech, jako je postgres, takže ji nebudete moci zapnout v připojovacím řetězci.
Chyba, které čelíte, je výsledkem pokusu o provedení dvou dotazů na jedné čtečce otevřených dat. Při použití tj. Entity Framework toto obvykle se stane, když máte Léné načítání zapnuto a vlastnosti lazy se načtou do stejné čtečky jako nadřazené entity. Například kód podobný tomuto by mohl způsobit tuto chybu:
var users = context.Users.Where(u => u.FirstName.StartsWith("Ha"));
foreach (var user in users)
{
Console.WriteLine(user.Address.StreetName);
}
V 1. řádku nejsou načtena žádná data, protože jsme připravili pouze dotaz Linq. Když spustíme foreach
DataReader
je otevřena a je dotazován sběr uživatelů, který splňuje naše podmínky, ale čtenář není uzavřen. Pak uvnitř foreach
dostaneme se k vlastnosti Address of User, která je líně načtena. Toto pomalé načítání způsobí spuštění dotazu na stejném otevřeném DataReader
a tehdy nastane výjimka. Pokud bych se chtěl chyby zbavit, mohl bych jednoduše přidat ToList()
(nebo cokoliv, co způsobí provedení dotazu) na konec řádku, jako je tento:
var users = context.Users.Where(u => u.FirstName.StartsWith("Ha")).ToList();
Doufám, že vám to pomůže.