2014-09-05 10 views
6

Ich ging durch How can I easily convert DataReader to List<T>?Mit AutoMapper mit Data Reader

Ich wollte so etwas wie das umzusetzen, was als Antwort auf den obigen Link akzeptiert wird.

Scenrio:

ich OdbcDataReader bin mit aus der Datenbank abgerufen werden.

Und ich habe eine Modellklasse. Zu Ihrer Information: Die Eigenschaften dieser Klasse sind exakte Replikate der Spaltennamen aus der Datenbank. Ich muss diese Spalten den Eigenschaften zuordnen und die Liste zurückgeben. Kann dies mit Automapper erreicht werden.

+0

Warum nicht Sie die Lösung in dieser Antwort zur Verfügung gestellt verwenden kann? Es sieht so aus, als ob es nicht von einer bestimmten Implementierung des Datenlesers abhängt. – Dirk

+0

Beachten Sie, dass in AutoMapper 1.1 - die letzte Version für. Net 3.5 - ** DataReader-Zuordnungen Groß-und Kleinschreibung beachten **. Um diese Version ohne Berücksichtigung der Groß-/Kleinschreibung zu verwenden, muss AutoMapper wie folgt patchen: https://github.com/AutoMapper/AutoMapper/issues/90 – stuartd

Antwort

8

So etwas

public List<T> ReadData<T>(string queryString) 
{ 
    using (var connection = new SqlConnection(constr)) 
     using (var command = new SqlCommand(queryString, connection)) 
     { 
      connection.Open(); 
      using (var reader = command.ExecuteReader()) 
       if (reader.HasRows) 
        return Mapper.DynamicMap<IDataReader, List<T>>(reader); 
     } 

    return null; 
} 

Definieren Sie Ihre Klasse

public class MarkType 
{ 
    public int id { get; set; } 
    public string name { get; set; } 
    public DateTime inserted { get; set; } 
} 

Verwenden

List<MarkType> lst = _helper.ReadData<MarkType>("SELECT [id],[name],[inserted] FROM [marktype]"); 
+0

Vielen Dank für Ihre wertvollen Eingaben. – Vikram

+4

Für alle, die sich nach dem 29. Dezember 2014 darauf beziehen, Das Automapper-Projekt hat die Unterstützung für "IDataReader" in den Automapper-Versionen 4.0 und höher entfernt. Siehe hierzu [commit] (https://github.com/AutoMapper/AutoMapper/commit/33831e3b53ed1cd698558daa2db483906ec5c13a). Version 3.1.1 (verfügbar in NuGet) verfügt noch über diese Funktionalität. – Cameron

+3

Es gibt ein [nuget-Paket] (https://www.nuget.org/packages/AutoMapper.Data), das das wieder hinzufügt (derzeit ist es in der Betaversion). [GitHub AutoMapper.Data] (https://github.com/AutoMapper/AutoMapper.Data) – jhamm

Verwandte Themen