PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

MultipleActiveResultSets para modelo de dados de entidade postgresql e ado.net


Múltiplos Conjuntos de Resultados Ativos (MARS) é um recurso introduzido no SQL Server 2005 e não está disponível em outros sistemas de banco de dados como postgres, portanto, você não poderá ativá-lo na cadeia de conexão.

O erro que você está enfrentando é resultado da tentativa de realizar duas consultas em um leitor de dados aberto. Ao usar, por exemplo, o Entity Framework, geralmente acontece quando você tem Carregamento lento ativado e as propriedades lentas são carregadas no mesmo leitor que as entidades pai. Por exemplo, um código semelhante a este pode produzir este erro:
var users = context.Users.Where(u => u.FirstName.StartsWith("Ha"));
foreach (var user in users)
{
    Console.WriteLine(user.Address.StreetName);
}

Na 1ª linha, nenhum dado é buscado, pois apenas preparamos uma consulta Linq. Quando iniciamos o foreach um DataReader é aberto e a coleção de usuários que atende às nossas condições é consultada, mas o leitor não é fechado. Em seguida, dentro de foreach chegamos à propriedade Address de User que é carregada com preguiça. Esse carregamento lento causa uma execução de consulta no mesmo DataReader aberto e é aí que ocorre a exceção. Se eu quisesse me livrar do erro, poderia simplesmente adicionar um ToList() (ou qualquer coisa que faça com que a consulta seja executada) até o final da linha assim:

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

Espero que isso irá ajudá-lo.