Mysql
 sql >> Base de données >  >> RDS >> Mysql

asp.net / EntityFramework - Pourquoi mon pool d'applications plante-t-il ?

Vous devrez probablement déboguer l'API et spécifier plus de détails pour aider à affiner une cause. Quelques choses que je peux voir :

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;

Le premier .ToList() était nécessaire car vous tentiez de calculer des valeurs (NameComplet) dans l'expression Linq qui auraient normalement été transmises à EF, ce que votre fournisseur de base de données ne comprendra pas. Pour plus d'efficacité, sélectionnez uniquement les propriétés mappées et remplacez toutes les valeurs calculées par des propriétés en lecture seule sur votre modèle de vue. (PartenaireMapItem)

private string _nomComplet = null;
public string NomComplet
{ 
    get { return _nomComplet ?? (_nomComplet = LastName.Substring(0,1).ToUpper() + ". " + FirstName); }
}

Cet exemple met en mémoire tampon le résultat en supposant que les détails du nom sont en lecture seule. Si le prénom/nom peut être mis à jour, renvoyez simplement le nom calculé à chaque fois.

Les autres propriétés devraient convenir, en supposant que SeDeclace/ADomicile sont des valeurs de chaîne et non des entités enfants. Il en va de même pour la liste des Prestations. Une liste de chaînes pour les noms de Prestation devrait suffire.

L'autre modification mineure que j'ai apportée consistait à récupérer les modèles de vue dans une variable à inspecter avant de revenir. Cela facilite mieux l'utilisation d'un point d'arrêt pour inspecter les résultats avant de revenir. À partir de là, déterminez si une erreur revient du calcul des résultats, ou autre chose comme la sérialisation des modèles de vue résultants vers le client.