一,介紹: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
四,原生Dapper使用流程:
0,兩種下載使用方法:
(1),推薦下載方法(使用Nuget下載):
---Nuget是一個.NET平臺下的開源的項目,它是Visual Studio的擴展。在使用Visual Studio開發基於.NET Framework的應用時,Nuget能把在項目中添加、移除和更新引用的工作變得更加快捷方便。
---安裝成功以後,生成一下網站,項目bin目錄下,會生成幾個Dapper文件(主要是Dapper.dll,120k)。
(2),可以在官網上下載Dapper源代碼,即SqlMapper.cs文件,在項目中App_Code文件夾中加入這個文件,就像Ado.net中的SqlHelper一樣。
---源文件地址:https://github.com/StackExchange/dapper-dot-net/blob/master/Dapper%20NET40/SqlMapper.cs
1,下面可以在項目中開始使用Dapper了
2,連接數據庫字符串。根據不同的數據庫進行相應設置,如下SQL和SQLite連接方式。
//sqlserver
public class SqlDapperHelper
{
private static string GetConnectionString()
{
return @"Data Source=.;Initial Catalog=Test;Persist Security Info = True; User ID = sa;
Password = 123; Max Pool Size = 512;Connection Timeout=10000";
}
public static System.Data.IDbConnection CreateLocalConnection()
{
var connection = new System.Data.SqlClient.SqlConnection(GetConnectionString());
connection.Open();
return connection;
}
}
//sqlite
public class SqliteDapperHelp
{
private static string CreateConnectionString(string ConnectString)
{
SQLiteConnectionStringBuilder connectionString = new SQLiteConnectionStringBuilder();
connectionString.DataSource = ConnectString;
string conStr = connectionString.ToString();
return conStr;
}
private static IDbConnection CreateConnection(string serverName)
{
string connectionString = CreateConnectionString(serverName);
SQLiteConnection conn = new SQLiteConnection(connectionString);
conn.Open();
return conn;
}
/// <summary>
///
/// </summary>
/// <param name="aaa">數據庫文件位置 例:\\D:\Test.db</param>
/// <returns></returns>
public static IDbConnection CreateRemoteConnection(string aaa)
{
return CreateConnection(aaa);
}
}
手寫sql插入數據
using (System.Data.IDbConnection conn = DapperHelper.CreateLocalConnection())
{
//查詢返回多條
string rowsql="select * from Person";
List<Tperson> list = dbConnection.Query<Tperson>(rowsql, null).ToList();
//查詢返回第一條
dynamic jktj = conn.Query<dynamic>("select * from Person ",null).FirstOrDefault();
//返回首行首列
string sql = "select count(*) from Person where YEAR(創建時間) = DATEPART(year, GETDATE())";
int 結果 = Convert.ToInt32(conn.ExecuteScalar(sql));
string Name="張三";
string sql = $"update Person set name={Name} where id=1";
return conn.Execute(sql) > 0;
}
dapper封裝方法 query 增刪 及事務
using Dapper;
using Dapper.Contrib.Extensions;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Threading.Tasks;
using WebApi;
namespace Test
{
public class Test
{
public TPerson Getperson(string id)
{
using (System.Data.IDbConnection dbConnection = DapperHelper.CreateLocalConnection())
{
TPerson 人員 = dbConnection.Get<TPerson>(id);//通過id查詢表裏的數據 返回實體中所有字段
//List<TPerson> 人員1 = dbConnection.GetAll<TPerson>().ToList();//返回所有的數據
return 人員;
}
}
[Table("表_Person")]//對應數據庫中的表名
public class TPerson
{
[Key]//數據庫表中必須要有id 或者使用[ExplicitKey]
public string id { get; set; }
public string name { get; set; }
public string sex { get; set; }
public string age { get; set; }
public string address { get; set; }
}
/// <summary>
/// Insert Update
/// </summary>
/// <returns></returns>
public bool InsertResult()
{
using (System.Data.IDbConnection conn = DapperHelper.CreateLocalConnection())
{
try
{
TPerson person = new TPerson();
person.id = "123";
person.name = "123";
person.sex = "123";
person.age = "123";
person.address = "123";
long aa = conn.Insert<TPerson>(person);
//bool bb= conn.Update<TPerson>(person);
if (aa > 0)
{
return true;
}
return false;
}
catch (Exception ex)
{
return false;
}
}
}
/// <summary>
/// 事務
/// </summary>
/// <returns></returns>
public bool Transaction()
{
using (System.Data.IDbConnection conn = DapperHelper.CreateLocalConnection())
{
List<string> strsql = new List<string>();
strsql.Add("delete from 表_Person where id=123");
strsql.Add("insert into 表_Person(id,name,sex,age,address) values(111,'asd','asd','asd','asd')");
IDbTransaction transaction = conn.BeginTransaction();
try
{
for (int i = 0; i < strsql.Count; i++)
{
int aa = conn.Execute(strsql[i], null, transaction);
}
transaction.Commit();
return true;
}
catch (Exception exception)
{
transaction.Rollback();
return false;
}
}
}
}
}