sql >> Database teknologi >  >> RDS >> PostgreSQL

MultipleActiveResultSets til postgresql og ado.net enhedsdatamodel

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.



  1. ASP/.NET til at forbinde MySQL Server uden at bruge ODBC eller en hvilken som helst driver?

  2. Genarranger / nulstil automatisk stigning i primærnøgle

  3. SQL Server 2016:Gem forespørgselsresultater til en CSV-fil

  4. Gemmer ændringer efter tabelredigering i SQL Server Management Studio