sql >> Base de Datos >  >> RDS >> PostgreSQL

MultipleActiveResultSets para el modelo de datos de entidad postgresql y ado.net

Conjuntos de resultados activos múltiples (MARS) es una función introducida en SQL Server 2005 y no está disponible en otros sistemas de bases de datos como postgres, por lo que no podrá activarla en la cadena de conexión.

El error al que se enfrenta es el resultado de intentar realizar dos consultas en un lector de datos abiertos. Cuando se usa, por ejemplo, Entity Framework, esto generalmente sucede cuando tienes Lazy Loading activado y las propiedades perezosas se cargan en el mismo lector que las entidades principales. Por ejemplo, un código similar a este podría producir este error:

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

En la primera línea no se obtienen datos ya que solo hemos preparado una consulta Linq. Cuando iniciamos el foreach un DataReader se abre y se consulta la colección de usuarios que cumplen con nuestras condiciones pero no se cierra el lector. Luego dentro de foreach llegamos a la propiedad Dirección del Usuario que está cargada de forma diferida. Esta carga diferida provoca la ejecución de una consulta en el mismo DataReader abierto y ahí es cuando ocurre la excepción. Si quisiera deshacerme del error, simplemente podría agregar un ToList() (o cualquier cosa que provoque que se realice la consulta) hasta el final de la línea de esta manera:

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

Espero que esto te ayude.