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

第二步:在项目中应用程序集,使用已经写好的扩展方法

  1. using Utitity.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 源码

  1. using AutoMapper;
  2. using System.Data;
  3. namespace Utitity.AutoMapper
  4. {
  5. /// <summary>
  6. /// 实体映射帮助类
  7. /// </summary>
  8. public static class MapperHelper
  9. {
  10. #region 配置映射规则
  11. /// <summary>
  12. /// 确保映射配置只注册一次
  13. /// </summary>
  14. static MapperHelper()
  15. {
  16. Configure();
  17. }
  18. /// <summary>
  19. /// 注册 Mapper 转换规则约定
  20. /// </summary>
  21. static void Configure()
  22. {
  23. Mapper.CreateMap<IDataReader, xxxxModel>();//只需要约定基础类型,不要要写成List<xxxxModel>这种形式
  24. }
  25. #endregion
  26. #region 实体映射扩展方法
  27. /// <summary>
  28. /// 将 IDataReader 转为实体对象
  29. /// </summary>
  30. /// <typeparam name="T"></typeparam>
  31. /// <param name="dr"></param>
  32. /// <returns></returns>
  33. public static T GetEntity<T>(this IDataReader dr)
  34. {
  35. return Mapper.Map<T>(dr);
  36. }
  37. /// <summary>
  38. /// 将 DataSet 转为实体对象
  39. /// </summary>
  40. /// <typeparam name="T"></typeparam>
  41. /// <param name="ds"></param>
  42. /// <returns></returns>
  43. public static T GetEntity<T>(this DataSet ds)
  44. {
  45. if (ds == null || ds.Tables.Count == 0 || ds.Tables[0].Rows.Count == 0)
  46. return default(T);
  47. var dr = ds.Tables[0].CreateDataReader();
  48. return Mapper.Map<T>(dr);
  49. }
  50. /// <summary>
  51. /// 将 DataTable 转为实体对象
  52. /// </summary>
  53. /// <typeparam name="T"></typeparam>
  54. /// <param name="dt"></param>
  55. /// <returns></returns>
  56. public static T GetEntity<T>(this DataTable dt)
  57. {
  58. if (dt == null || dt.Rows.Count == 0)
  59. return default(T);
  60. var dr = dt.CreateDataReader();
  61. return Mapper.Map<T>(dr);
  62. }
  63. #endregion
  64. }

使用 AutoMapper 映射 IDataReader、DataSet、DataTable 到实体类的更多相关文章

  1. DataTable与实体类互相转换

    /// <summary> /// DataTable与实体类互相转换 /// </summary> /// <typeparam name="T"& ...

  2. C# DataTable 转 实体类

    C# 中查询结果DataTable转实体类: 比如:List<RtmInterview> rtmList = GetDataById( id); public List<RtmInt ...

  3. DataTable转实体类

    /// <summary> /// DataTable与实体类互相转换 /// </summary> /// <typeparam name="T"& ...

  4. 【转】DataTable与实体类互相转换

    原文地址:https://www.cnblogs.com/marblemm/p/7084797.html /// <summary> /// DataTable与实体类互相转换 /// & ...

  5. DataTable和实体类通过反射相互转换

    using System.Runtime.Serialization; using System.Data; using System.Reflection; using System.Collect ...

  6. datatable与实体类之间相互转化的几种方法

    #region DataTable转换成实体类 /// <summary> /// 填充对象列表:用DataSet的第一个表填充实体类 /// </summary> /// & ...

  7. DataTable和实体类之间的转换

    using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.R ...

  8. .net 根据匿名类生成实体类,根据datatable生成实体类,根据sql生成实体类

    在开发中可能会遇到这几种情况 1.EF或LINQ查询出来的匿名对象在其它地方调用不方便,又懒的手动建实体类 2.通过datatable反射实体需要先建一个类 ,头痛 3.通过SQL语句返回的实体也需要 ...

  9. DataTable与实体类的转换

    多年前写的DataTable与实体类的转换,已放github 阅读目录 介绍 起因 代码 UnitTest GitHub 介绍 很多年前一直使用Ado.net,后来慢慢转型到其他的orm,在转型过程中 ...

  10. 用DataTable填充实体类List

    /// <summary> /// 用DataTable填充实体类List /// </summary> public static List<T> FillLis ...

随机推荐

  1. poj 2253 最短路floyd **

    题意:有两只青蛙和若干块石头,现在已知这些东西的坐标,两只青蛙A坐标和青蛙B坐标是第一个和第二个坐标,现在A青蛙想要到B青蛙那里去,并且A青蛙可以借助任意石头的跳跃,而从A到B有若干通路,问从A到B的 ...

  2. [Java]JavaScript在这里学习

    在这里学习JavaScript >>  JS 教程 >>  JavaScript 高级教程

  3. 简单分享apache封IP的方法

    1. 在配置文件里设置: 打开httpd.conf编辑:<Directory “/var/www/html”>     Options Indexes FollowSymLinks    ...

  4. 如果想使用GIT Extentions的解决冲突窗口,安装时必须勾选KDIFF3

    因为第一次安装时,没有选择同时安装KDIFF3,所以遇到冲突时,点击合并,始终无法弹出合并窗口. 还有一个问题,就是在安装时,要选择OpenSSH,不要选择PuTTY.

  5. 【转】Java类成员变量默认初始化规则

    一个变量作为类成员使用的时候,如果没有被初始化,java会为其分配默认值: -------------------------------------------------------------- ...

  6. STM32 TIMER OUTPUT DIAGRAM

  7. LPC43xx SGPIO Experimentation

    LPC4350 SGPIO Experimentation The NXP LPC43xx microcontrollers have an interesting, programmable ser ...

  8. SWD and JTAG selection mechanism

    SWD and JTAG selection mechanism SWJ-DP enables either an SWD or JTAG protocol to be used on the deb ...

  9. Windows Server 2008 r2 64位激活

    1.工具:CW 下载链接:https://pan.baidu.com/s/1bphOkW3 密码:80d4 2.查看系统是否激活:计算机图标点右键,选择 属性,就可以查看激活情况 3.准备好CW工具 ...

  10. MySQL编码latin1转utf8

    mysql移植含有中文的数据时,很容易出现乱码问题.很多是在从mysql4.x向mysql5.x移植的时候出现.mysql的缺省字符集是 latin1,在使用mysql4.x的时候,很多人都是用的la ...