sql >> Databasteknik >  >> RDS >> Mysql

asp.net / EntityFramework - Varför kraschar min programpool?

Du kommer förmodligen att behöva felsöka API:et och specificera mer detaljer för att hjälpa till att begränsa en orsak. Ett par saker jag kan se:

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;

Den tidiga .ToList() krävdes eftersom du försökte beräkna värden (NameComplet) i Linq-uttrycket som normalt skulle ha matats till EF som din DB-leverantör inte kommer att förstå. För effektivitetens skull väljer du bara mappade egenskaper och ändrar istället alla beräknade värden till skrivskyddade egenskaper på din vymodell. (PartenaireMapItem)

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

Det exemplet buffrar resultatet förutsatt att namndetaljerna är skrivskyddade. Om för-/efternamn kan uppdateras, returnera bara det beräknade namnet varje gång.

De andra egenskaperna bör vara bra, förutsatt att SeDeclace/ADomicile är strängvärden och inte underordnade enheter. Detsamma gäller listan över Prestations. En lista med strängar för Prestation-namnen borde vara bra.

Den andra mindre ändringen jag gjorde var att hämta vymodellerna i en variabel för att inspektera innan de återvände. Detta underlättar bättre att använda en brytpunkt för att inspektera resultaten innan du återvänder. Härifrån avgör om något fel kommer tillbaka från beräkningen av resultaten, eller något annat som att serialisera de resulterande vymodellerna tillbaka till klienten.




  1. VISA ALLA datumdata mellan två datum; om det inte finns någon rad för ett visst datum, visa noll i alla kolumner

  2. Felaktigt datetime-värde när du konfigurerar Django med MySQL

  3. CASE i MySQL tvingar kolumndatatyp till BIGINT istället för INT

  4. Hur ska jag migrera DDL-ändringar från en miljö till en annan?