Mysql
 sql >> Database >  >> RDS >> Mysql

asp.net / EntityFramework - Perché il mio pool di applicazioni si arresta in modo anomalo?

Probabilmente dovrai eseguire il debug dell'API e specificare più dettagli per restringere la causa. Un paio di cose che posso vedere:

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;

Il primo .ToList() era richiesto perché stavi tentando di calcolare i valori (NameComplet) nell'espressione Linq che normalmente sarebbero stati inviati a EF che il tuo provider di database non capirà. Per motivi di efficienza, seleziona solo le proprietà mappate e modifica i valori calcolati in proprietà di sola lettura nel modello di visualizzazione. (PartenaireMapItem)

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

Quell'esempio memorizza il risultato nel buffer presupponendo che i dettagli del nome siano di sola lettura. Se il nome/cognome può essere aggiornato, è sufficiente restituire ogni volta il nome calcolato.

Le altre proprietà dovrebbero andare bene, supponendo che SeDeclace/ADomicile siano valori stringa e non entità figlio. Lo stesso vale per l'elenco delle Prestazioni. Un elenco di stringhe per i nomi Prestation dovrebbe andare bene.

L'altra piccola modifica che ho apportato è stata quella di recuperare i modelli di visualizzazione in una variabile da ispezionare prima della restituzione. Ciò facilita meglio l'utilizzo di un punto di interruzione per controllare i risultati prima di tornare. Da qui determina se si verifica un errore dal calcolo dei risultati o qualcos'altro come la serializzazione dei modelli di visualizzazione risultanti sul client.