使用 AutoMapper 映射 IDataReader、DataSet、DataTable 到實體類AutoMapper是一個.NET的對象映射工具。
項目地址:https://github.com/AutoMapper/AutoMapper。
幫助文檔:https://github.com/AutoMapper/AutoMapper/wiki
主要用途
領域對象與DTO之間的轉換、數據庫查詢結果映射至實體對象。
這里主要說下使用 AutoMapper 將IDataReader、DataSet、DataTable 轉為實體的方法。
依賴文件:AutoMapper.dll、AutoMapper.Net4.dll 兩個 dll 文件
AutoMapper.Net4.dll 這個文件可以下載代碼自己編譯,該文件是封裝了對IDataReader 的支持
簡單說下 AutoMapper 使用
第一步:聲明映射約定
Mapper.CreateMap<IDataReader, menuModel>();//將IDataReader 映射為menuModel 實體
第二步:轉換實體
//IDataReader =>menuModel
using (IDataReader dr = .....) { var list = Mapper.Map<List<menuModel>>(dr); dr.Close(); }
以下是自己封裝的一個 AutoMapper 幫助類
使用方法:
第一步:將要轉換的模型在 靜態構造函數中 約定下
/// <summary> /// 注冊 Mapper 轉換規則約定 /// </summary> static void Configure() { Mapper.CreateMap<IDataReader, menuModel>();
...
Mapper.CreateMap<IDataReader, xxxxxModel>(); }
第二步:在項目中應用程序集,使用已經寫好的擴展方法
[csharp]view plaincopy- usingUtitity.AutoMapper
IDataReader dr = ...; var list1 = dr.GetEntity<List<menuModel>>(); DataSet ds = ...; var list2 = ds.GetEntity<List<menuModel>>(); DataTable dt = ...; var list3 = dt.GetEntity<List<menuModel>>();
MapperHelper 源碼
[csharp]view plaincopy

- usingAutoMapper;
- usingSystem.Data;
- namespaceUtitity.AutoMapper
- {
- ///<summary>
- ///實體映射幫助類
- ///</summary>
- publicstaticclassMapperHelper
- {
- #region配置映射規則
- ///<summary>
- ///確保映射配置只注冊一次
- ///</summary>
- staticMapperHelper()
- {
- Configure();
- }
- ///<summary>
- ///注冊Mapper轉換規則約定
- ///</summary>
- staticvoidConfigure()
- {
- Mapper.CreateMap<IDataReader,xxxxModel>();//只需要約定基礎類型,不要要寫成List<xxxxModel>這種形式
- }
- #endregion
- #region實體映射擴展方法
- ///<summary>
- ///將IDataReader轉為實體對象
- ///</summary>
- ///<typeparamname="T"></typeparam>
- ///<paramname="dr"></param>
- ///<returns></returns>
- publicstaticTGetEntity<T>(thisIDataReaderdr)
- {
- returnMapper.Map<T>(dr);
- }
- ///<summary>
- ///將DataSet轉為實體對象
- ///</summary>
- ///<typeparamname="T"></typeparam>
- ///<paramname="ds"></param>
- ///<returns></returns>
- publicstaticTGetEntity<T>(thisDataSetds)
- {
- if(ds==null||ds.Tables.Count==0||ds.Tables[0].Rows.Count==0)
- returndefault(T);
- vardr=ds.Tables[0].CreateDataReader();
- returnMapper.Map<T>(dr);
- }
- ///<summary>
- ///將DataTable轉為實體對象
- ///</summary>
- ///<typeparamname="T"></typeparam>
- ///<paramname="dt"></param>
- ///<returns></returns>
- publicstaticTGetEntity<T>(thisDataTabledt)
- {
- if(dt==null||dt.Rows.Count==0)
- returndefault(T);
- vardr=dt.CreateDataReader();
- returnMapper.Map<T>(dr);
- }
- #endregion
- }