sql >> Base de Datos >  >> RDS >> Mysql

asp.net/EntityFramework - ¿Por qué se bloquea mi grupo de aplicaciones?

Probablemente necesitará depurar la API y especificar más detalles para ayudar a reducir la causa. Un par de cosas que puedo 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;

Se requería el primer .ToList() porque estaba intentando calcular valores (NameComplet) en la expresión Linq que normalmente se habría enviado a EF que su proveedor de base de datos no entenderá. Para mayor eficiencia, solo seleccione propiedades asignadas y, en su lugar, cambie los valores calculados a propiedades de solo lectura en su modelo de vista. (PartenaireMapItem)

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

Ese ejemplo almacena en búfer el resultado asumiendo que los detalles del nombre son de solo lectura. Si se puede actualizar el nombre/apellido, simplemente devuelva el nombre calculado cada vez.

Las otras propiedades deberían estar bien, asumiendo que SeDeclace/ADomicile son valores de cadena y no entidades secundarias. Lo mismo ocurre con la lista de Prestations. Una lista de cadenas para los nombres de Prestation debería estar bien.

El otro cambio menor que hice fue recuperar los modelos de vista en una variable para inspeccionar antes de regresar. Esto facilita mejor el uso de un punto de interrupción para inspeccionar los resultados antes de regresar. Desde aquí, determine si algún error está regresando del cálculo de los resultados, o algo más, como serializar los modelos de vista resultantes al cliente.