一行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 ...
随机推荐
- koahub软件市场微信编辑器源码,可下载
管理过公众平台的小伙伴都知道,公众平台最重要的是图文的编辑和发布,由于微信公众平台的图文编辑页面比较简陋,功能和样式的比较少,所以一般都是使用专业的微信图文编辑器,koahub软件市场里有一款专门编辑 ...
- 1854: [Scoi2010]游戏
1854: [Scoi2010]游戏 Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 2538 Solved: 905[Submit][Status] ...
- java入门知识
Java特性 简单.面向对象.支持网络.解释性.健壮性.安全性.高性能.可移植(跨平台) Java特点 开源.免费.跨平台.面向对象 应用平台 JavaSE(standard edition)(c/s ...
- 手动编写JQUERY插件
就拿一个简单的示例来说,鼠标点击输入框,提示文字消息,鼠标移开,再显示提示文字. <script type="text/javascript"> //编写插件 (fun ...
- querySlector
在传统的 JavaScript 开发中,查找 DOM 往往是开发人员遇到的第一个头疼的问题,原生的 JavaScript 所提供的 DOM 选择方法并不多,仅仅局限于通过 tag, name, id ...
- vue学习笔记 计算属性(四)
计算属性就是vue实例里的computed属性,对应一个对象,里面可以放各种方法,方法的作用就是可以生成和数据变量对应的计算后的变量,跟数据相关的复杂逻辑变量,都可以使用计算属性实现,computed ...
- 如何下载github项目中的部分文件(文件夹)
https://minhaskamal.github.io/DownGit/#/home 将你要下载的链接放进去即可.
- strtol函数 将字符串转换为相应进制的整数
转自http://hi.baidu.com/qwpsmile/blog/item/9bc44efa4f41018a9f514637.html +----------------+| strt ...
- Android 中基于 Binder的进程间通信
摘要:对 Binder 工作机制进行了分析. 首先简述 Android 中 Binder 机制与传统的 Linux 进程间的通信比较,接着对基于 Binder 进程间通信的过程分析 最后结合开发实例 ...
- java与JSTL库
JSTL1. jstl的概述 * apache的东西,依赖EL * 使用jstl需要导入jstl1.2.jar * 四大库: > core:核心库,重点 > fmt:格式 ...