一行code实现ADO.NET查询结果映射至实体对象。
AutoMapper是一个.NET的对象映射工具。
主要用途
领域对象与DTO之间的转换、数据库查询结果映射至实体对象。
这次我们说说 数据库查询结果映射至实体对象。
先贴一段代码:
public Student GetStudent(SqlDataReader reader)
{
string studentId = reader.GetString();
string studentIdSuffix = reader.GetString();
long studentId = reader.GetInt64();
string firstName = reader.GetString();
string middleName = string.Empty; // TODO: Restore middle name code - reader.GetString(4);
string lastName = reader.GetString();
string alternateFirstName = reader.IsDBNull() ? string.Empty : reader.GetString();
string alternateLastName = reader.IsDBNull() ? string.Empty : reader.GetString();
}
这是项目中十年前的code,当然这里面的属性只是冰山一角,可想而知这耦合度多高,降低了后期的维护效率。
后来大家用反射实现了很多DataSet、SqlDataReader、DataTable与实体、集合之间的相互转换的helper类库,其便捷性也是可以接受的。
但是如果就用一行code是不是更便捷。
Demo:
Datatable->List
DataTable dt = new DataTable();
dt.Columns.Add("Name");
dt.Columns.Add("Age");
dt.Columns.Add("School");
for (int i = ; i < ; i++)
{
var newRow = dt.NewRow();
newRow["Name"] = "戴威" + i;
newRow["Age"] = + i;
newRow["School"] = "清华大学";
dt.Rows.Add(newRow);
} var studentlist = AutoMapper.Mapper.DynamicMap<List<Student>>(dt.CreateDataReader()); public class Student
{
public string Name { get; set; }
public int Age { get; set; }
public string School { get; set; }
}
DataSet->List
DataSet ds = new DataSet();
DataTable dt = new DataTable();
dt.Columns.Add("Name");
dt.Columns.Add("Age");
dt.Columns.Add("School");
for (int i = ; i < ; i++)
{
var newRow = dt.NewRow();
newRow["Name"] = "戴威" + i;
newRow["Age"] = + i;
newRow["School"] = "清华大学";
dt.Rows.Add(newRow);
}
ds.Tables.Add(dt);
var studentlist = AutoMapper.Mapper.DynamicMap<List<Student>>(ds.CreateDataReader());
SqlDataReader->Entity
string conStr = "server=.;database=Test;Trusted_Connection=SSPI";
SqlConnection con = new SqlConnection(conStr); SqlCommand command = new SqlCommand();
command.CommandText = string.Format("select * from {0}", "Test");
command.Connection = con;
SqlDataReader reader = null;
try
{
con.Open();
reader = command.ExecuteReader(); if (reader.Read())
test = AutoMapper.Mapper.DynamicMap<List<Test>>(reader); }
catch (Exception ex)
{
//.....
}
finally
{
if (reader != null)
reader.Close();
}
public class Test
{
public string Id { get; set; } public string Name { get; set; } public string Age { get; set; }
}
仅仅做的是test,烦请不吝赐教。
一行code实现ADO.NET查询结果映射至实体对象。的更多相关文章
- 将JSON映射为实体对象(iOS篇)
将JSON映射为实体对象(iOS篇) iOS开发人员已经习惯于将JSON转换为字典或者数组来进行操作了,接下来我要做的事情,可能匪夷所思,但是,对WP和Android开发人员而言,他们更倾向于将JSO ...
- 无线客户端框架设计(5.1):将JSON映射为实体对象(iOS篇)
iOS开发人员已经习惯于将JSON转换为字典或者数组来进行操作了,接下来我要做的事情,可能匪夷所思,但是,对WP和Android开发人员而言,他们更倾向于将JSON转换为实体对象进行操作. 我所设计的 ...
- Mybaits 源码解析 (八)----- 全网最详细,没有之一:结果集 ResultSet 自动映射成实体类对象(上篇)
上一篇文章我们已经将SQL发送到了数据库,并返回了ResultSet,接下来就是将结果集 ResultSet 自动映射成实体类对象.这样使用者就无需再手动操作结果集,并将数据填充到实体类对象中.这可大 ...
- Activiti 5.17 实体对象与类和数据库表的映射
一.Activiti 5.17 mybatis的mapping文件声明映射的实体对象关系. <configuration><settings><settingname=& ...
- 使用ADO.NET查询和操作数据
使用ADO.NET查询和操作数据 StringBuilder类: 用来定义可变字符串StringBuilder sb = new StringBuilder("");//追加字符串 ...
- 使用ADO.NET查询和访问数据库
使用ADO.NET查询和访问数据库步骤 使用ADO.NET查询和访问数据库 连接数据库操作: 1. 定义连接字符串: String connString = "Data Sour ...
- Entity Framework Code First使用DbContext查询
DbContext.DbSet及DbQuery是Entity Framework Code First引入的3个新的类,其中DbContext用于保持数据库会话连接,实体变化跟踪及保存,DbSet用于 ...
- EntityFramework之原始查询如何查询未映射的值,你又知道多少?
前言 今天又倒腾了下EF,如题所示,遇到了一些问题,并最终通过尝试找到了解决方案,可能不是最终的解决方案,若你有更好的解决方案,望告知,同时通过阅读此文,定让你收获不少. 引入 当我们查询时一直是中规 ...
- C++ ADO 数据查询
ADO 数据查询 关键点 上1条 下1条 第1条 最后1条 实现过程 // stdafx.h : include file for standard system include files, #im ...
随机推荐
- 有关html,css,js,less的使用规范
写前端写久了,规则跟着开发的项目走,突然觉得是不是该总结总结前端的语言使用规则,看到下面这篇还不错,就直接链接过来了哦 http://zhibimo.com/read/Ashu/front-end-s ...
- 深入理解java String 及intern
一.字符串问题 字符串在我们平时的编码工作中其实用的非常多,并且用起来也比较简单,所以很少有人对其做特别深入的研究.倒是面试或者笔试的时候,往往会涉及比较深入和难度大一点的问题.我在招聘的时候也偶尔会 ...
- 用ajax实现不刷新分页
今天我们要用ajax做一个分页: 实现Ajax分页: 如果可以的话加上查询条件 找一张表做分页 分页不使用page类 页面不用刷新 Ajax加载数据 <!doctype html> < ...
- MVC不用302跳转Action,内部跳转
原理,在一个Action里面return 另一个Action出去. public class HomeController : Controller { // GET: Home public Act ...
- JS清除DIV的选中状态
var clearSlct = "getSelection" in window ? function () { window.getSelection().removeAllRa ...
- 微信JS分享功能--微信JS系列文章(二)
概述 在上一篇文章微信JS初始化-- 微信JS系列文章(一)中已经介绍了微信JS初始化的相关工作,接下来本文继续就微信JS的分享功能进行描述,供大家参考. 代码 $(document).ready(f ...
- mac开发环境配置
折腾了好几天了,终于安装一部分了,mac装的win10,太占空间了,看到学习资源使用的工具,自己搜了一下安装了,在学习使用git的时候,都说mac比win好用多了,我tm为啥抱着mac装win费劲呢! ...
- nginx错误记录
症状: 安装phpBB3.1的最后一步完成安装之后,注册用户,浏览器崩溃.localhost的所有页面都打不开同时没有响应. Trace: 虽然打开了nginx.exe,但是进程中未发现服务. 重新电 ...
- 使用arcpy.mapping模块批量出图
出图是项目里常见的任务,有的项目甚至会要上百张图片,所以批量出土工具很有必要.arcpy.mapping就是ArcGIS里的出图模块,能快速完成一个出图工具. arcpy.mapping模块里常用 ...
- AE + GDAL实现影像按标准图幅分割(下)
在上篇实现了遥感影像的切割,本篇讲切割前的准备.主要分为以下几步: (1)将影像的投影坐标转换为地理坐标,以便于之后的图幅划分.AE坐标转换函数如下 private bool Proj2Geo(ISp ...