一旅择,介紹:Dapper是一款輕量級ORM工具。如果你在小的項目中掂僵,使用Entity Framework妻熊、NHibernate 來處理大數據訪問及關系映射,未免有點殺雞用牛刀。你又覺得ORM省時省力,這時Dapper 將是你不二的選擇。
---ORM框架的核心思想是對象關系映射历造,ORM是將表與表之間的操作,映射成對象和對象之間的操作船庇,就是通過操作實體類來達到操作表的目的吭产。從數據庫提取的數據會自動按你設置的映射要求封裝成特定的對象。之后你就可以通過對對象進行操作來修改數據庫中的數據鸭轮。這時候你面對的不是信息的碎片臣淤,而是一個形象鮮明的對象。
二张弛,假如你喜歡原生的Sql語句荒典,又喜歡ORM的簡單,那你一定會喜歡上Dapper吞鸭,這款ROMDapper的優(yōu)勢:
輕量寺董。只有一個文件(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;
?}