2014-09-05 11 views
6

ho passato How can I easily convert DataReader to List<T>?Utilizzando automapper con Lettore di dati

volevo implementare qualcosa di simile a ciò che è accettato come una risposta nel link qui sopra.

Scenrio:

Sto usando OdbcDataReader per recuperare dal database.

E ho una classe modello. Per vostra informazione, le proprietà di questa classe sono la replica esatta dei nomi delle colonne dal database. Ho bisogno di mappare queste colonne alle proprietà e restituire l'elenco Questo può essere realizzato utilizzando Automapper.

+0

Perché non si può utilizzare la soluzione fornita in quella risposta? Sembra che non dipenda da un'implementazione di un lettore di dati specifico. – Dirk

+0

Basta notare che in AutoMapper 1.1 - l'ultima versione per .Net 3.5 - ** I mapping DataReader sono case sensitive **. Per utilizzare questa versione in modo non sensibile alla distinzione tra maiuscole e minuscole AutoMapper necessita di patching come in https://github.com/AutoMapper/AutoMapper/issues/90 – stuartd

risposta

8

Qualcosa di simile

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; 
} 

Definire la classe

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

Usa

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

Grazie per tutti i preziosi input – Vikram

+4

Per tutti coloro che fanno riferimento a questo dopo il 29 dicembre 2014, il progetto Automapper ha rimosso il supporto per 'IDataReader' nelle versioni di Automapper 4.0 e successive. Fare riferimento a questo [commit] (https://github.com/AutoMapper/AutoMapper/commit/33831e3b53ed1cd698558daa2db483906ec5c13a). La versione 3.1.1 (disponibile su NuGet) ha ancora questa funzionalità. – Cameron

+3

C'è un [pacchetto nuget] (https://www.nuget.org/packages/AutoMapper.Data) che aggiunge questo in (attualmente è in beta). [GitHub AutoMapper.Data] (https://github.com/AutoMapper/AutoMapper.Data) – jhamm