Mapping mit Linq-Abfrage-Ergebnisse zu einer DTO-Klasse

Möchte ich, um Datensätze aus der Datenbank mit EF und weisen Sie die Werte zu einer DTO-Klasse.Betrachten Sie die folgenden Tabellen für eine Linq-Abfrage.

TableA,TableB, TableC

Für jede Tabelle a ein Datensatz, mehrere Datensätze in Tabelle B. Für jede Tabelle B Datensatz, mehrere Datensätze in TableC.
Nun meine DTOs Aussehen

public class TableA_DTO
{
    public int tableA_rowid { get; set; }
    //remaining tableA field definitions

    public List<TableB_DTO> TableB_records { get; set; }
}

public class TableB_DTO
{
    public int tableB_rowid { get; set; }
    //remaining tableB  field definitions

    public List<TableC_DTO> TableC_records { get; set; }
}

public class TableC_DTO
{
    public int tableC_rowid { get; set; }
    //remaining tableC field definitions
}

meine linq-Abfrage wie folgt aussieht

var qry = from ent in TableA
          select ent;

In meinem mapping-Klasse-I-Schleife durch die Elemente in Abfrage-Ergebnis so:

    foreach (var dataitem in query)
    {
        TableA_DTO dto = new TableA_DTO();
        dto.tableA_rowid =  dataitem.ID;
        //remaining field definitions here
    }

Nun, das funktioniert für alle Felder in TableA wo holt sich einen Datensatz aus der Datenbank und legt die benötigten Eigenschaften in TableA_DTO für jedes Feld in der Tabelle TableA. Ich möchte auch Auffüllen, alle übereinstimmenden Datensätze in Tabelle B in der Tabelle a-Eigenschaft-Feld durch den Namen TableB_records und auch in TableB_DTO alle übereinstimmenden Datensätze aus TableC in TableB_DTO Eigentums durch den Namen TableC_records

Kann das getan werden? Was muss ich ändern? Ist es die linq-Abfrage oder die Art, wie ich mein mapping

Vielen Dank für Ihre Zeit...

  • Gibt es einen Grund, dass man nicht mit Entity Framework POCO ' s (aka DbContext, manchmal falsch genannt Ersten Code)? Im Grunde, können Sie beseitigen die Notwendigkeit für DTO und Nutzung EF POCO ' s statt?
  • Haben Sie sich überlegt mit AutoMapper ? Je nachdem, wie andere Ihre DTOs sind, dies könnte so einfach wie zwei oder drei Zeilen code für das mapping.
  • Die Datenbank ist bereits vorhanden, so ging die edmx-Weg
  • ich würde nicht noch etwas ändern müssen in der linq-Abfrage, um die Daten an, so kann automapper verwenden? Es sieht nicht wie automapper tun können, dass aus meiner übersicht..es wird tiefer Graben, wenn Sie sagen, es tut... danke 🙂
  • Sie würde immer noch mit den EF-Objekte zu erhalten Ihre Daten. AuotMapper Karte würde dann die relevanten Felder von einem zum anderen (und zurück). Wenn Sie es tun, durch Konvention (z.B. gleiche Namen), BIN wie Magie funktioniert. Wenn Sie Präfixe, die in Ihrem DTO, können Sie selbst definieren.
  • Aber haben Sie POCO ist? Ich sage "code first", denn das ist es, was viele Menschen rufen Sie es, aber Sie können gehen Sie die edmx-route, und trotzdem poco/dbcontext-statt Objekt-Kontext (Sie Haken einen anderen T4 auf der Modell-Diagramm). Das gibt Sie Ihrer leichten POCO, aber Sie sind immer noch Modell - oder Datenbank - ersten.
  • Ich erstellte DTO-Klassen, also konnte ich die Werte aus der edmx-Klassen und weisen Sie diese auf meinem getrennt geringes Gewicht DTO-Klassen mit einem mapper, die ich zu schreiben, das für jedes DTO. Der automapper würde haben dieses problem gelöst. Aber die akzeptierte Antwort hier unten, entfernt die Notwendigkeit an der auto-Karte, denn jetzt ist meine var query ist vom Typ {myCustomDTO}

InformationsquelleAutor user20358 | 2012-02-17
Schreibe einen Kommentar