Welcome

首页 / 软件开发 / .NET编程技术 / .NET框架中Dapper ORM的用法

.NET框架中Dapper ORM的用法2014-09-08 cnblogs Yowe假如你喜欢原生的Sql语句,又喜欢ORM的简单,那你一定会喜欢上Dapper这款ROM. Dapper的优势:

1,Dapper是一个轻型的ORM类。代码就一个SqlMapper.cs文件,编译后就40K的一个很小的Dll.

2,Dapper很快。Dapper的速度接近与IDataReader,取列表的数据超过了DataTable。

3,Dapper支持什么数据库。Dapper支持Mysql,SqlLite,Mssql2000,Mssql2005,Oracle等一系列的数据库,当然如果你知道原理也可以让它支持Mongo db

4,Dapper的r支持多表并联的对象。支持一对多 多对多的关系。并且没侵入性,想用就用,不想用就不用。无XML无属性。代码以前怎么写现在还怎么写。 5,Dapper原理通过Emit反射IDataReader的序列队列,来快速的得到和产生对象。性能实在高高高。

6,Dapper支持net2.0,3.0,3.5,4.0。【如果想在Net2.0下使用,可以去网上找一下Net2.0下如何配置运行Net3.5即可。】

7,Dapper语法十分简单。并且无须迁就数据库的设计。

下面介绍Dapper如何使用,来进行高效开发,以下操作是编译后在Net3.5下操作的例子,Net4.0下大部分函数有默认值,参数很简单。

//数据库里的表:CREATE TABLE ColumnCat(Id INT IDENTITY(1,1) NOT NULL PRIMARY KEY,NAME NVARCHAR(150) NULL,ModifiedOn SMALLDATETIME NULL DEFAULT(GETDATE()),Parentid INT)CREATE TABLE Column(Id INT IDENTITY(1,1) NOT NULL PRIMARY KEY,NAME NVARCHAR(150) NULL,ModifiedDate SMALLDATETIME NULL DEFAULT(GETDATE()),ColumnCatid INT null)
常用的表,分类和内容表,分类可以有下级类别。以下操作基本上都是对这两个表的操作。//连接数据库字符串。

private readonly string sqlconnection = "Data Source=RENFB;Initial Catalog=test;User Id=sa;Password=sa;";//public readonly string mysqlconnectionString = @"server=127.0.0.1;database=test;uid=renfb;pwd=123456;charset="gbk"";
//获取Sql Server的连接数据库对象。SqlConnection

public SqlConnection OpenConnection(){SqlConnection connection = new SqlConnection(sqlconnection);connection.Open();return connection;}//获取MySql的连接数据库对象。MySqlConnection//public MySqlConnection OpenConnection()//{// MySqlConnection connection = new MySqlConnection(mysqlconnectionString);// connection.Open();// return connection;/
注:如果需要换成Mysql数据库,只用将获得sql Server的连接数据库对象的函数注释掉,取消MySql的连接数据库对象的函数的注释,一并取消Mysql连接字符串的注释,并修改为自己的连接信息。

Query()方法: Query()是IDbConnection扩展方法并且重载了,从数据库里提取信息,并用来填充我们的业务对象模型。

//先创建一个类,是数据库的ColumnCat表的模型。
public class ColumnCat
{
public int Id { get; set; }
public string Name { get; set; }
public DateTime ModifiedOn { get; set; }
public int Parentid { get; set; }
}
//获取ColumnCat对象的集合。
public IEnumerable<ColumnCat> SelectColumnCats()
{
using (IDbConnection conn = OpenConnection())
{
const string query = "select * from ColumnCat order by id desc";
return conn.Query<ColumnCat>(query,null);
}
}
就是这么简单,直接在例子中嵌入Sql,很容易扩展为存储过程,可以使用别名使结果集中的列与业务对象模型(ColumnCat)的属性对应。

//下面使用上面的集合显示出分类。

List<ColumnCat> AllColumnCat =SelectColumnCats().ToList<ColumnCat>();
foreach (ColumnCat cat in AllColumnCat.Where(c => c.Parentid == 0))
{
Response.Write("Name==>" + cat.Name + " ");
Response.Write("时间==>" + cat.ModifiedOn + " ");
Response.Write("<br/>");
foreach (ColumnCat c in AllColumnCat
.Where<ColumnCat>(subColumnCat => subColumnCat.Parentid == cat.Id))
{
Response.Write("&nbsp;&nbsp;++++");
Response.Write("Name==>" + c.Name + " ");
Response.Write("时间==>" + c.ModifiedOn + " ");
Response.Write("<br/>");
}
}