一行code实现ADO.NET查询结果映射至实体对象。
2017-04-25 10:21
447 查看
AutoMapper是一个.NET的对象映射工具。
主要用途
领域对象与DTO之间的转换、数据库查询结果映射至实体对象。
这次我们说说 数据库查询结果映射至实体对象。
先贴一段代码:
这是项目中十年前的code,当然这里面的属性只是冰山一角,可想而知这耦合度多高,降低了后期的维护效率。
后来大家用反射实现了很多DataSet、SqlDataReader、DataTable与实体、集合之间的相互转换的helper类库,其便捷性也是可以接受的。
但是如果就用一行code是不是更便捷。
Demo:
Datatable->List
DataSet->List
SqlDataReader->Entity
}
仅仅做的是test,烦请不吝赐教。
主要用途
领域对象与DTO之间的转换、数据库查询结果映射至实体对象。
这次我们说说 数据库查询结果映射至实体对象。
先贴一段代码:
public Student GetStudent(SqlDataReader reader) { string studentId = reader.GetString(0); string studentIdSuffix = reader.GetString(1); long studentId = reader.GetInt64(2); string firstName = reader.GetString(3); string middleName = string.Empty; // TODO: Restore middle name code - reader.GetString(4); string lastName = reader.GetString(5); string alternateFirstName = reader.IsDBNull(6) ? string.Empty : reader.GetString(7); string alternateLastName = reader.IsDBNull(8) ? string.Empty : reader.GetString(9); }
这是项目中十年前的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 = 0; i < 10; i++) { var newRow = dt.NewRow(); newRow["Name"] = "戴威" + i; newRow["Age"] = 23 + 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 = 0; i < 10; i++) { var newRow = dt.NewRow(); newRow["Name"] = "戴威" + i; newRow["Age"] = 23 + 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,烦请不吝赐教。
相关文章推荐
- C# Spring.Net 使用对象映射(RowMapper)返回数据库查询到的结果集
- ADO.NET Entity Framework 如何:自定义建模和映射文件以使用自定义对象(实体框架)
- ADO.NET Entity Framework 对象查询(实体框架)
- [2004-8-4]VB.Net学习笔记,使用ADO.Net对象访问数据库,将结果写入ListView
- 运用 ADO.NET 对象优化数据查询代码
- ADO.NET Entity Framework 如何:创建模型及映射文件嵌入资源(实体框架)
- 通过JAVA反射实现简单的ORM,将查询结果封装为对象
- ADO.NET Entity Framework 查询概念模型(实体框架)
- 运用 ADO.NET 对象优化数据查询代码
- ADO.NET Entity Framework查询实体和关联(实体框架快速入门)
- ADO.NET Entity Framework如何:定义单个实体映射到两个表的模型
- 运用 ADO.NET 对象优化数据查询代码
- NBear.Mapping使用教程(4):实体对象与ADO.NET对象的转换
- Flex AS3与 ADO.NET Entity Framework 实体对象数据类型转换(转)
- ADO.NET Entity Framework 如何:定义单个实体映射到两个表的模型
- 运用 ADO.NET 对象优化数据查询代码
- 运用 ADO.NET 对象优化数据查询代码
- Asp.Net大型项目实践(4)-用NHibernate保存和查询我们的业务领域对象之实现基本的数据库访问(附源码)
- ADO.NET实体数据模型多表连接查询中的实体键问题
- 运用ADO.NET对象优化数据查询代码