一,介绍:Dapper是一款轻量级ORM工具。如果你在小的项目中,使用Entity Framework、NHibernate 来处理大数据访问及关系映射,未免有点杀鸡用牛刀。你又觉得ORM省时省力,这时Dapper 将是你不二的选择。
---ORM框架的核心思想是对象关系映射,ORM是将表与表之间的操作,映射成对象和对象之间的操作,就是通过操作实体类来达到操作表的目的。从数据库提取的数据会自动按你设置的映射要求封装成特定的对象。之后你就可以通过对对象进行操作来修改数据库中的数据。这时候你面对的不是信息的碎片,而是一个形象鲜明的对象。
二,假如你喜欢原生的Sql语句,又喜欢ORM的简单,那你一定会喜欢上Dapper,这款ROMDapper的优势:
轻量。只有一个文件(SqlMapper.cs),编译完成之后只有120k(好象是变胖了)
速度快。Dapper的速度接近与IDataReader,取列表的数据超过了DataTable。
支持多种数据库。Dapper可以在所有Ado.net Providers下工作,包括sqlite, sqlce, firebird, oracle, MySQL, PostgreSQL and SQL Server
可以映射一对一,一对多,多对多等多种关系。
性能高。通过Emit反射IDataReader的序列队列,来快速的得到和产生对象,性能不错。
支持FrameWork2.0,3.0,3.5,4.0,4.5
1.Dapper的安装
1.1使用NuGet安装
项目 “引用”-“管理NuGet 程序包”
1.2再点击浏览,搜索dapper,点击搜索结果中的Dapper,勾选项目,选择安装;
安装好后,在引用这里会有一个“Dapper”
2.测试 Dapper
在数据库建一个表 Person
CREATE TABLE [dbo].[Person]
(
Name NVARCHAR(50) NULL ,
Remark NVARCHAR(50) NULL ,
[ID] [BIGINT] IDENTITY(1, 1)
NOT NULL ,
PRIMARY KEY CLUSTERED ( [ID] ASC )
WITH ( PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON ) ON [PRIMARY]
)
ON [PRIMARY];
GO
3.新建一个 DapperHelper 类,代码如下图 当没有引用 Dapper 时
using (IDbConnection connection = new SqlConnection(connectionString))
{
return connection.Execute("insert into Person(Name,Remark) values(@Name,@Remark)", person);
} 会报下图的错,说
"System.Data.IDbConnection 不包含 Execute 拓展"
当引用Dapper 后 多了一个IDbConnection.Execute 的拓展,所以 Dapper 应该属于 System.Data.IDbConnection 的一些拓展。
3.保存数据
单笔插入一条数据,新建一个实体Person
public class Person
{
public int ID { get; set; }
public string Name { get; set; }
public string Remark { get; set; }
}
DapperHelper.cs 端代码:
public static int Insert(Person person)
{
using (IDbConnection connection = new SqlConnection(connectionString))
{
return connection.Execute("insert into Person(Name,Remark) values(@Name,@Remark)", person);
}
}
前端代码:
private void button1_Click(object sender, EventArgs e)
{
try
{
Person person = new Person();
person.Name = "路人甲";
person.Remark = "备注1";
DapperHelper.Insert(person);
}
catch (Exception ex)
{
MessageBox.Show("保存出错:"+ex.ToString());
}
}
保存结果:
3.2 批量插入
DapperHelper.cs 端代码
public static int PLInsert(List person)
{
int result = 0;
using (IDbConnection connection = new SqlConnection(connectionString))
{
result = connection.Execute("insert into Person(Name,Remark) values(@Name,@Remark)", person);
}
return result;
}
前端代码:
private void button1_Click(object sender, EventArgs e)
{
try {
Listlistperson = new List();
Person p1 = new Person();
p1.Name = "路人乙";
p1.Remark = "备注2";
Person p2 = new Person();
p2.Name = "路人丙";
p2.Remark = "备注3";
listperson.Add(p1);
listperson.Add(p2);
DapperHelper.PLInsert(listperson);
}
catch (Exception ex)
{
MessageBox.Show("保存出错:"+ex.ToString());
}
}
查询结果:
3.3 查询数据
前端代码:
private void button1_Click(object sender, EventArgs e)
{
try
{
DapperHelper.Query();
}
catch (Exception ex)
{
MessageBox.Show("保存出错:"+ex.ToString());
}
}
返回 List数据
public static ListQuery()
{
using (IDbConnection connection = new SqlConnection(connectionString))
{
return connection.Query("SELECT * FROM Person").ToList();
}
}
返回 DataTable
public static DataTable Query()
{
Listlist = new List();
var dt = new DataTable();
using (IDbConnection connection = new SqlConnection(connectionString))
{
dt.Load(connection.ExecuteReader("SELECT * FROM Person"));
}
return dt;
}