sql >> Databasteknik >  >> RDS >> PostgreSQL

MultipleActiveResultSets för postgresql och ado.net enhetsdatamodell

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.



  1. listview visa data från databasen i Android

  2. Connect Entity Framework med MYSQL i VS2019

  3. Dela ord med stor bokstav i sql

  4. Problem med att skapa främmande nycklar i mySql