PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

MultipleActiveResultSets für postgresql- und ado.net-Entitätsdatenmodelle

Multiple Active Results Sets (MARS) ist eine Funktion, die in SQL Server 2005 eingeführt wurde und in anderen Datenbanksystemen wie Postgres nicht verfügbar ist, sodass Sie sie nicht in der Verbindungszeichenfolge aktivieren können.

Der Fehler, mit dem Sie konfrontiert sind, ist das Ergebnis des Versuchs, zwei Abfragen auf einem offenen Datenlesegerät durchzuführen. Wenn Sie z. B. Entity Framework verwenden, ist dies normalerweise der Fall passiert, wenn Sie Lazy Loading haben eingeschaltet und die faulen Eigenschaften werden in denselben Reader wie die übergeordneten Entitäten geladen. Beispielsweise könnte ein ähnlicher Code diesen Fehler erzeugen:

var users = context.Users.Where(u => u.FirstName.StartsWith("Ha"));
foreach (var user in users)
{
    Console.WriteLine(user.Address.StreetName);
}

In der 1. Zeile werden keine Daten geholt, da wir nur eine Linq-Abfrage vorbereitet haben. Wenn wir foreach starten ein DataReader wird geöffnet und eine Sammlung von Benutzern, die unsere Bedingungen erfüllen, wird abgefragt, aber der Reader wird nicht geschlossen. Dann in foreach wir erreichen die Address-Eigenschaft des Benutzers, die faul geladen ist. Dieses verzögerte Laden verursacht eine Abfrageausführung auf demselben geöffneten DataReader und das ist, wenn die Ausnahme auftritt. Wenn ich den Fehler loswerden wollte, könnte ich einfach ein ToList() hinzufügen (oder irgendetwas, das die Ausführung der Abfrage verursacht) bis zum Ende der Zeile wie folgt:

var users = context.Users.Where(u => u.FirstName.StartsWith("Ha")).ToList();

Ich hoffe, das wird Ihnen helfen.