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. Redis和数据库 数据同步问题

    Redis和数据库同步问题 缓存充当数据库 比如说Session这种访问非常频繁的数据,就适合采用这种方案:当然了,既然没有涉及到数据库,那么也就不会存在一致性问题: 缓存充当数据库热点缓存 读操作 ...

  2. xcode 拷贝新的ios image 进去以后 出现 the divices is locked

    苹果公司时不时的给你更新下ios系统.对于开发者来说.更新xcode是灾难性的. 一直在用xcode7.3.1,可是最新不小心把手机升级到 ios 10.1.1,这下好了,真机调试不行了.提示没有镜像 ...

  3. SNMP代理软件开发

    SNMP代理模块包括6个子模块: SNMP协议主要有五种报文get.get-next.set.get-response,trap.l.get-request操作:从代理进程处提取一个或多个参数值2.g ...

  4. Polly简介 — 3. 执行策略

    执行策略 执行策略的常见方式是调用策略的Execute函数 var policy = Policy.Handle<TimeoutException>().Retry();policy.Ex ...

  5. HDU 4815 Little Tiger vs. Deep Monkey(2013长春现场赛C题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4815 简单的DP题. #include <stdio.h> #include <st ...

  6. USBDM RS08/HCS08/HCS12/Coldfire V1,2,3,4/DSC/Kinetis Debugger and Programmer -- MC9S08JS16

    Introduction The attached files provide a port of a combined TBDML/OSBDM code to a MC9S08JS16 proces ...

  7. Timer triggered DMA transfer - Delay between requesting the DMA transfer

    Hello, I'm working with a STM32F407 controller board.   Right now, I want to trigger a DMA transfer ...

  8. kettle的基本介绍

    Kettle 主要内容: 一.ETL介绍 二.Kettle介绍 三.Java调用Kettle API 一.ETL介绍 1. ETL是什么? 1).ETL分别是“Extract”.“ Transform ...

  9. js判断只能输入数字或小数点

    JS判断只能是数字和小数点 1.文本框只能输入数字代码(小数点也不能输入) <input onkeyup="this.value=this.value.replace(/\D/g,'' ...

  10. [转]LRU缓存实现(Java)

    LRU Cache的LinkedHashMap实现 LRU Cache的链表+HashMap实现 LinkedHashMap的FIFO实现 调用示例 LRU是Least Recently Used 的 ...