一行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 ...
随机推荐
- TypeScript设计模式之职责链、状态
看看用TypeScript怎样实现常见的设计模式,顺便复习一下. 学模式最重要的不是记UML,而是知道什么模式可以解决什么样的问题,在做项目时碰到问题可以想到用哪个模式可以解决,UML忘了可以查,思想 ...
- 属性property和字段的区别
在类中定义的一个成员变量叫字段,要把这个成员变量变成一个属性必须加上getter和setter方法
- Hadoop单机和伪分布式安装
本教程为单机版+伪分布式的Hadoop,安装过程写的有些简单,只作为笔记方便自己研究Hadoop用. 环境 操作系统 Centos 6.5_64bit 本机名称 hadoop001 本机IP ...
- Levenshtein distance 编辑距离
编辑距离,又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数.许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符 实现方案: 1. 找出最长 ...
- 移动端高清、多屏适配方案——rem
背景: 开发移动端H5页面 一套设计图 不同尺寸的手机 不同分辨率的手机 方案:使用rem作为单位解决一套设计图适应不同分辨率,不同尺寸的手机. 概念: REM(font size of the ro ...
- javascript中的字符串编码、字符串方法详解
js中的字符串是一种类数组,采用UTF-16编码的Unicode字符集,意味字符串的每个字符可用下标方式获取,而每个字符串在内存中都是一个16位值组成的序列.js对字符串的各项操作均是在对16位值进行 ...
- windows32位安装MYSQL-python1.2.3
建议不要用pip安装MYSQL-python,因为会自动选择MYSQL-python1.2.5这个版本,但是这个版本不支持windows 32位系统. 1.首先安装VS2008,因为要依赖VC9.0编 ...
- 移动web页面支持弹性滚动的3个方案
有段时间一直折腾移动端页面弹性滚动的各种问题,做了点研究,今天做个小分享~ 传统 pc 端中,子容器高度超出父容器高度,通常使用 overflow:auto 可出现滚动条拖动显示溢出的内容,而移动we ...
- 使用Python对Excel进行读写操作
学习Python的过程中,我们会遇到Excel的读写问题.这时,我们可以使用xlwt模块将数据写入Excel表格中,使用xlrd模块从Excel中读取数据.下面我们介绍如何实现使用Python对Exc ...
- stl1
#include<iostream> #include<map> #include<string> using namespace std; map<st ...