Hat AutoMapper Unterstützung von Linq?

Ich bin sehr interessiert in Linq to SQL mit Lazy load-Funktion. Und in meinem Projekt, das ich verwendet AutoMapper zu map-DB-Modell Domänen-Modell (aus DB_RoleInfo zu DO_RoleInfo). In meinem code-repository wie unten:

    public DO_RoleInfo SelectByKey(Guid Key)
    {
        return SelectAll().Where(x => x.Id == Key).SingleOrDefault();
    }

    public IQueryable<DO_RoleInfo> SelectAll()
    {
        Mapper.CreateMap<DB_RoleInfo, DO_RoleInfo>();
        return from role in _ctx.DB_RoleInfo
               select Mapper.Map<DB_RoleInfo, DO_RoleInfo>(role);
    }

SelectAll Methode gut laufen, aber wenn ich Anrufe SelectByKey bekomme ich den Fehler:

Methode “RealMVC.Daten.DO_RoleInfo MapDB_RoleInfo,DO_RoleInfo" nicht übersetzen konnte, um SQL.

Ist es, dass Automapper nicht unterstützt Linq komplett?

Statt Automapper, versuchte ich die manuelle mapping-code unten:

public IQueryable<DO_RoleInfo> SelectAll()
{
    return from role in _ctx.DB_RoleInfo 
    select new DO_RoleInfo 
    {
        Id = role.id,
        name = role.name,
        code = role.code
    };
}

Diese Methode funktioniert, wie ich es mir vorstelle.

  • Nur ein Hinweis auf das update in Ergänzung zu meiner Antwort: Die zweite version funktioniert, weil Linq to SQL, die bereits weiß, dass Sie getan haben, eine irreversible Projektion; die SelectByKey ist eigentlich nur mithilfe von Linq to Objects. Wenn Sie untersuchen die tatsächliche Abfrage, die generiert wird, ich glaube, Sie werden feststellen, dass es immer noch die Auswahl aller Entitäten aus der Datenbank, die entspricht ToList() und dann filtern Sie die Ergebnisliste.
  • Es ist nicht so, dass AutoMapper unterstützt LINQ. Es ist, dass LINQ to SQL nicht unterstützt AutoMapper. Das LINQ zum SQL-Abfrage-Anbieter blickt auf die expression tree zu bestimmen, wie zu generieren der SQL-Abfrage. Wenn es um den Mapper.Karte Stück, es hat keine Ahnung, wie zu generieren der SQL.
InformationsquelleAutor Sam Zhou | 2010-02-06
Schreibe einen Kommentar