使用 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>(); }
第二步:在项目中应用程序集,使用已经写好的扩展方法
- 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 源码
- using AutoMapper;
- using System.Data;
- namespace Utitity.AutoMapper
- {
- /// <summary>
- /// 实体映射帮助类
- /// </summary>
- public static class MapperHelper
- {
- #region 配置映射规则
- /// <summary>
- /// 确保映射配置只注册一次
- /// </summary>
- static MapperHelper()
- {
- Configure();
- }
- /// <summary>
- /// 注册 Mapper 转换规则约定
- /// </summary>
- static void Configure()
- {
- Mapper.CreateMap<IDataReader, xxxxModel>();//只需要约定基础类型,不要要写成List<xxxxModel>这种形式
- }
- #endregion
- #region 实体映射扩展方法
- /// <summary>
- /// 将 IDataReader 转为实体对象
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="dr"></param>
- /// <returns></returns>
- public static T GetEntity<T>(this IDataReader dr)
- {
- return Mapper.Map<T>(dr);
- }
- /// <summary>
- /// 将 DataSet 转为实体对象
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="ds"></param>
- /// <returns></returns>
- public static T GetEntity<T>(this DataSet ds)
- {
- if (ds == null || ds.Tables.Count == 0 || ds.Tables[0].Rows.Count == 0)
- return default(T);
- var dr = ds.Tables[0].CreateDataReader();
- return Mapper.Map<T>(dr);
- }
- /// <summary>
- /// 将 DataTable 转为实体对象
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="dt"></param>
- /// <returns></returns>
- public static T GetEntity<T>(this DataTable dt)
- {
- if (dt == null || dt.Rows.Count == 0)
- return default(T);
- var dr = dt.CreateDataReader();
- return Mapper.Map<T>(dr);
- }
- #endregion
- }
使用 AutoMapper 映射 IDataReader、DataSet、DataTable 到实体类的更多相关文章
- DataTable与实体类互相转换
/// <summary> /// DataTable与实体类互相转换 /// </summary> /// <typeparam name="T"& ...
- C# DataTable 转 实体类
C# 中查询结果DataTable转实体类: 比如:List<RtmInterview> rtmList = GetDataById( id); public List<RtmInt ...
- DataTable转实体类
/// <summary> /// DataTable与实体类互相转换 /// </summary> /// <typeparam name="T"& ...
- 【转】DataTable与实体类互相转换
原文地址:https://www.cnblogs.com/marblemm/p/7084797.html /// <summary> /// DataTable与实体类互相转换 /// & ...
- DataTable和实体类通过反射相互转换
using System.Runtime.Serialization; using System.Data; using System.Reflection; using System.Collect ...
- datatable与实体类之间相互转化的几种方法
#region DataTable转换成实体类 /// <summary> /// 填充对象列表:用DataSet的第一个表填充实体类 /// </summary> /// & ...
- DataTable和实体类之间的转换
using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.R ...
- .net 根据匿名类生成实体类,根据datatable生成实体类,根据sql生成实体类
在开发中可能会遇到这几种情况 1.EF或LINQ查询出来的匿名对象在其它地方调用不方便,又懒的手动建实体类 2.通过datatable反射实体需要先建一个类 ,头痛 3.通过SQL语句返回的实体也需要 ...
- DataTable与实体类的转换
多年前写的DataTable与实体类的转换,已放github 阅读目录 介绍 起因 代码 UnitTest GitHub 介绍 很多年前一直使用Ado.net,后来慢慢转型到其他的orm,在转型过程中 ...
- 用DataTable填充实体类List
/// <summary> /// 用DataTable填充实体类List /// </summary> public static List<T> FillLis ...
随机推荐
- 【10.31校内测试】【组合数学】【记忆化搜索/DP】【多起点多终点二进制拆位Spfa】
Solution 注意取模!!! Code #include<bits/stdc++.h> #define mod 1000000007 #define LL long long usin ...
- 使用 IntraWeb (26) - 基本控件之 TIWMenu
TIWMenu 的任务是让原来的 TMainMenu 呈现在网页上, 通过其 AttachedMenu 属性关联一个 TMainMenu 是必需的. TIWMenu 所在单元及继承链: IWCompM ...
- CentOS下KVM配置NAT网络(网络地址转换模式)
KVM虚拟机Nat方式上网: # 查看当前活跃的网络 virsh net-list # 查看该网络的详细配置 virsh net-dumpxml default 客户机的XML配置文件中interfa ...
- Project 03- STM32F4xx PID controller
Project 03- STM32F4xx PID controller CMSIS files from ARM provides ARM Math functions. There are als ...
- (Delphi) Using the Disk Cache 使用磁盘缓存
The Chilkat Spider component has disk caching capabilities. To setup a disk cache, create a new dire ...
- 咏南中间件新增MORMOT移动端演示
咏南中间件新增MORMOT移动端演示 基于FMX,支持安卓.IOS移动端. 1)使用INDY 的HTTP控件进行查询: procedure TForm1.查询1Click(Sender: TObjec ...
- ZServer4D开源项目
ZServer4D开源项目 ZServer4D 是一套从商业项目剥离而出的云服务器中间件,可以承载百万级的分布式负载服务,并且支持IoT及内网穿透. 作者将它开源了 https://github.co ...
- CATransition 实践
时间差不够,导致闪屏 CATransition *animation = [CATransition animation]; animation.delegate = self; animation. ...
- 查看Oracle数据库名和实例名的命令
查看数据库名 SQL> select name from v$database; NAME --------- ORCL SQL> desc v$database; 名称 ...
- Snail—UI学习之得到某组件的方法
第一种方法:依据传入函数的參数对象的tag属性区分 比方 多个button运行同一个方法,可是不同的方法运行时.里面的逻辑又不一样 那就得加以区分 这时能够用tag来差别 //再新建一个Button ...