sql >> Databáze >  >> RDS >> PostgreSQL

MultipleActiveResultSets pro datový model entity postgresql a ado.net

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.



  1. Jak přejmenuji sloupec primárního klíče v MySQL?

  2. Nelze zobrazit obrázek pomocí php a mysql

  3. Sqlalchemy a PostgreSql:jak nastavit primární klíč ručně bez konfliktů v budoucnu?

  4. Oracle:Connect By Loop v uživatelských datech