2014-09-05 39 views
6

przeszedłem How can I easily convert DataReader to List<T>?Korzystanie AutoMapper z danych Reader

Chciałem zaimplementować coś podobnego, co jest akceptowane jako odpowiedź w powyższym linku.

Scenrio:

Używam OdbcDataReader pobrać z bazy danych.

Mam klasę modelu. FYI, właściwości tej klasy są dokładną repliką nazw kolumn z bazy danych. Muszę zmapować te kolumny do właściwości i zwrócić listę Można to zrobić za pomocą Automapper.

+0

Dlaczego nie można korzystać z rozwiązania przewidzianego w tej odpowiedzi? Wygląda na to, że nie zależy to od konkretnej implementacji czytnika danych. – Dirk

+0

Zauważając to w AutoMapper 1.1 - ostatnia wersja .Net 3.5 - ** Odwzorowania DataReadera uwzględniają wielkość liter **. Aby korzystać z tej wersji w sposób niewrażliwy na wielkość liter, AutoMapper wymaga łatania, jak w https://github.com/AutoMapper/AutoMapper/issues/90 – stuartd

Odpowiedz

8

Coś takiego

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

definiować klasy

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

Zastosowanie

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

Dziękuję wszystkim za cenne dane wejściowe – Vikram

+4

Dla każdego, kto się do tego odnosi po 29 grudnia 2014 r., projekt Automapper usunął wsparcie dla 'IDataReader' w Automapper w wersjach 4.0 i wyższych. Zobacz to [commit] (https://github.com/AutoMapper/AutoMapper/commit/33831e3b53ed1cd698558daa2db483906ec5c13a). Wersja 3.1.1 (dostępna w NuGet) nadal ma tę funkcjonalność. – Cameron

+3

Istnieje pakiet [nuget] (https://www.nuget.org/packages/AutoMapper.Data), który dodaje go ponownie (obecnie jest w wersji beta). [GitHub AutoMapper.Data] (https://github.com/AutoMapper/AutoMapper.Data) – jhamm