2014-09-05 54 views
6

使用AutoMapper我通過How can I easily convert DataReader to List<T>?與數據讀取器

去我想要實現的東西像什麼被接受爲在上面的鏈接的答案。

Scenrio:

我使用OdbcDataReader從數據庫中檢索。

而且我有一個模型類。僅供參考,此類的屬性是數據庫中列名稱的精確副本。我需要將這些列映射到屬性並返回列表 這可以使用Automapper完成。

+0

爲什麼你就不能使用這個問題的答案提供的解決方案?它看起來不依賴於特定的數據讀取器實現。 – Dirk 2014-09-05 08:01:38

+0

請注意,在AutoMapper 1.1 - .Net 3.5的最後一個版本中 - ** DataReader映射區分大小寫**。以不區分大小寫的方式使用此版本AutoMapper需要修補,如https://github.com/AutoMapper/AutoMapper/issues/90 – stuartd 2014-09-05 15:13:44

回答

8

像這樣的事情

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

定義類

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

使用

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

感謝您的寶貴意見 – Vikram 2014-09-08 01:00:47

+4

對於任何在2014年12月29日之後引用此內容的人, Automapper項目已經在Automapper版本4.0和更高版本中移除了對「IDataReader」的支持。參考這個[提交](https://github.com/AutoMapper/AutoMapper/commit/33831e3b53ed1cd698558daa2db483906ec5c13a)。版本3.1.1(在NuGet上可用)仍然具有此功能。 – Cameron 2015-11-13 20:16:04

+3

有一個[nuget軟件包](https://www.nuget.org/packages/AutoMapper.Data)將其添加回來(目前處於測試階段)。 [GitHub AutoMapper.Data](https://github.com/AutoMapper/AutoMapper.Data) – jhamm 2015-12-01 22:30:32