Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

asp.net / EntityFramework - Por que meu pool de aplicativos trava?


Você provavelmente precisará depurar a API e especificar mais detalhes para ajudar a restringir uma causa. Algumas coisas que posso ver:
var prestation = queryString.FirstOrDefault();
// Handle when prestation comes back #null. Is that valid?

var results = db.Partenaires.Where(p => p.PartenairePrestations.Any(pp => pp.Prestation.NomPrestation == prestation.Value))
//                .ToList() // Avoid .ToList() here... Select the entity properties you need.
    .Select(p => new PartenaireMapItem {
        IdPartenaire = p.IdPartenaire,
        FirstName = p.FirstName,
        LastName = p.LastName,
        // NomComplet = p.LastName.Substring(0,1).ToUpper() + ". " + p.FirstName, // Remove. Make this a computed property in your view model.
        Type = p.Type,
        // DureeMin = 50, // Can remove, can be a computed property.
        Lat = p.Lat,
        Lng = p.Lng,
        ImageUrl = p.ImageUrl,
        SeDeplace = p.SeDeplace, // Ok if a String/value. 
        ADomicile = p.ADomicile, // Ok if a String/value.

        Notes = p.NoteClientPartenaires, // Ok if a String/value.
        Prestations = p.PartenairePrestations.Select(y => y.Prestation.NomPrestation).ToList(); // Assuming this is retrieving the names of presentations. List<string>.
    }).ToList();

return results;

O .ToList() inicial era necessário porque você estava tentando calcular valores (NameComplet) na expressão Linq que normalmente teria sido alimentada ao EF que seu provedor de banco de dados não entenderia. Para maior eficiência, selecione apenas as propriedades mapeadas e, em vez disso, altere quaisquer valores calculados para propriedades somente leitura em seu modelo de exibição. (PartenaireMapItem)
private string _nomComplet = null;
public string NomComplet
{ 
    get { return _nomComplet ?? (_nomComplet = LastName.Substring(0,1).ToUpper() + ". " + FirstName); }
}

Esse exemplo armazena em buffer o resultado assumindo que os detalhes do nome são somente leitura. Se o nome/sobrenome puder ser atualizado, apenas retorne o nome calculado a cada vez.

As outras propriedades devem estar bem, assumindo que SeDeclace/ADomicile são valores de string e não entidades filhas. O mesmo vale para a lista de Prestações. Uma lista de strings para os nomes de Prestação deve estar bem.

A outra pequena alteração que fiz foi recuperar os modelos de exibição em uma variável para inspecionar antes de retornar. Isso facilita o uso de um ponto de interrupção para inspecionar os resultados antes de retornar. A partir daqui, determine se algum erro está voltando do cálculo dos resultados ou algo mais, como serializar os modelos de exibição resultantes de volta ao cliente.