一行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 ... 
随机推荐
- Remove Element leetcode
			Given an array and a value, remove all instances of that value in place and return the new length. T ... 
- java Thread和Runable的深刻理解
			线程(Thread)是指程序的运行流程,多线程机制指同时运行多个程序块. Java中实现多线程有两种方法:继承Thread类:实现Runnable接口. Thread类的run()方法的制定者:接口R ... 
- 1112: [POI2008]砖块Klo
			1112: [POI2008]砖块Klo Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1245 Solved: 426[Submit][Statu ... 
- Shell中的算术运算(译)
			算术运算 尽管Shell中的变量被缺省地看做是string类型,而非number,但是Shell本身仍然支持算术运算.主要有以下5种方式. 1. declare 2. expr $ z=5 $ z=` ... 
- golang RWMutex读写锁分析
			RWMutex:是基于Mutex实现的读写互斥锁,一个goroutine可以持有多个读锁或者一个写锁,同一时刻只能持有读锁或者写锁 数据结构设计: type RWMutex struct { w Mu ... 
- Android使用Aspectj
			使用AspectJ 集成步骤: 1.AS配置Aspectj环境 2.配置使用ajc编译 4.定义注解 5.配置规则 6.使用 7.注意事项 AS配置Aspectj环境.Aspect目前最新版本为 1. ... 
- MVC不用302跳转Action,内部跳转
			原理,在一个Action里面return 另一个Action出去. public class HomeController : Controller { // GET: Home public Act ... 
- Django ORM模型的一点体会
			作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁转载. 使用Python的Django模型的话,一般都会用它自带的ORM(Object-relational ma ... 
- LinkedHashSet的概述和使用
			LinkedHashSet的特点: 可以保证怎么存就怎么取 package online.msym.set; import java.util.LinkedHashSet; public class ... 
- Android getAttributeIntValue()详解-霞辉
			经常使用getAttributeIntValue()方法,但是大多使用的形式是attrs.getAttributeFloatValue(null, "xxx", 0);只是在中间传 ... 
