.Net Core中Dapper的使用详解
生活随笔
收集整理的這篇文章主要介紹了
.Net Core中Dapper的使用详解
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Dapper?是一個(gè)輕量級(jí)ORM框架,在項(xiàng)目中如果對(duì)性能比較看中,Dapper是一個(gè)不錯(cuò)的選擇。接下來(lái)我們就來(lái)看看如何在項(xiàng)目中使用Dapper.
1.安裝Dapper
這里直接使用Nuget安裝。
?
?安裝完成之后,發(fā)現(xiàn)Nuget下已經(jīng)有了Dapper。
2.創(chuàng)建DapperHelper
接下來(lái)創(chuàng)建一個(gè)DapperHelper幫助類,來(lái)進(jìn)行讀取數(shù)據(jù)庫(kù)連接字符串,打開數(shù)據(jù)庫(kù)等操作。
代碼:
public class DapperHelper{/// 數(shù)據(jù)庫(kù)連接名private static string _connection = string.Empty;/// 獲取連接名 private static string Connection{get { return _connection; }//set { _connection = value; } }/// 返回連接實(shí)例 private static IDbConnection dbConnection = null;/// 靜態(tài)變量保存類的實(shí)例 private static DapperHelper uniqueInstance;/// 定義一個(gè)標(biāo)識(shí)確保線程同步 private static readonly object locker = new object();/// <summary>/// 私有構(gòu)造方法,使外界不能創(chuàng)建該類的實(shí)例,以便實(shí)現(xiàn)單例模式/// </summary>private DapperHelper(){// 這里為了方便演示直接寫的字符串,實(shí)例項(xiàng)目中可以將連接字符串放在配置文件中,再進(jìn)行讀取。_connection = @"server=.;uid=sa;pwd=sasasa;database=Dapper";}/// <summary>/// 獲取實(shí)例,這里為單例模式,保證只存在一個(gè)實(shí)例/// </summary>/// <returns></returns>public static DapperHelper GetInstance(){// 雙重鎖定實(shí)現(xiàn)單例模式,在外層加個(gè)判空條件主要是為了減少加鎖、釋放鎖的不必要的損耗if (uniqueInstance == null){lock (locker){if (uniqueInstance == null){uniqueInstance = new DapperHelper();}}}return uniqueInstance;}/// <summary>/// 創(chuàng)建數(shù)據(jù)庫(kù)連接對(duì)象并打開鏈接/// </summary>/// <returns></returns>public static IDbConnection OpenCurrentDbConnection(){if (dbConnection == null){dbConnection = new SqlConnection(Connection);}//判斷連接狀態(tài)if (dbConnection.State == ConnectionState.Closed){dbConnection.Open();}return dbConnection;}}?
3.創(chuàng)建上下文 DbContext?作用是調(diào)用Dapper中操作數(shù)據(jù)庫(kù)的方法,里面是我自己封的一些常用方法,當(dāng)然了這一步可以略去,直接調(diào)用也行,這里只是提供一種思路。
?
public static class DbContext{// 獲取開啟數(shù)據(jù)庫(kù)的連接private static IDbConnection Db{get{//創(chuàng)建單一實(shí)例 DapperHelper.GetInstance();return DapperHelper.OpenCurrentDbConnection();}}/// <summary>/// 查出一條記錄的實(shí)體/// </summary>/// <typeparam name="T"></typeparam>/// <param name="sql"></param>/// <returns></returns>public static T QueryFirstOrDefault<T>(string sql, object param = null){return Db.QueryFirstOrDefault<T>(sql, param);}public static Task<T> QueryFirstOrDefaultAsync<T>(string sql, object param = null){return Db.QueryFirstOrDefaultAsync<T>(sql, param);}/// <summary>/// 查出多條記錄的實(shí)體泛型集合/// </summary>/// <typeparam name="T">泛型T</typeparam>/// <returns></returns>public static IEnumerable<T> Query<T>(string sql, object param = null, IDbTransaction transaction = null, bool buffered = true, int? commandTimeout = null, CommandType? commandType = null){return Db.Query<T>(sql, param, transaction, buffered, commandTimeout, commandType);}public static Task<IEnumerable<T>> QueryAsync<T>(string sql, object param = null, IDbTransaction transaction = null, int? commandTimeout = null, CommandType? commandType = null){return Db.QueryAsync<T>(sql, param, transaction, commandTimeout, commandType);}public static int Execute(string sql, object param = null, IDbTransaction transaction = null, int? commandTimeout = null, CommandType? commandType = null){return Db.Execute(sql, param, transaction, commandTimeout, commandType);}public static Task<int> ExecuteAsync(string sql, object param = null, IDbTransaction transaction = null, int? commandTimeout = null, CommandType? commandType = null){return Db.ExecuteAsync(sql, param, transaction, commandTimeout, commandType);}public static T ExecuteScalar<T>(string sql, object param = null, IDbTransaction transaction = null, int? commandTimeout = null, CommandType? commandType = null){return Db.ExecuteScalar<T>(sql, param, transaction, commandTimeout, commandType);}public static Task<T> ExecuteScalarAsync<T>(string sql, object param = null, IDbTransaction transaction = null, int? commandTimeout = null, CommandType? commandType = null){return Db.ExecuteScalarAsync<T>(sql, param, transaction, commandTimeout, commandType);}/// <summary>/// 同時(shí)查詢多張表數(shù)據(jù)(高級(jí)查詢)/// "select *from K_City;select *from K_Area";/// </summary>/// <param name="sql"></param>/// <returns></returns>public static SqlMapper.GridReader QueryMultiple(string sql, object param = null, IDbTransaction transaction = null, int? commandTimeout = null, CommandType? commandType = null){return Db.QueryMultiple(sql, param, transaction, commandTimeout, commandType);}public static Task<SqlMapper.GridReader> QueryMultipleAsync(string sql, object param = null, IDbTransaction transaction = null, int? commandTimeout = null, CommandType? commandType = null){return Db.QueryMultipleAsync(sql, param, transaction, commandTimeout, commandType);}}?
接下來(lái)就可以調(diào)用了,DbContext.Action()
嗯。。。就寫到這里吧,以后再接著寫。
?
轉(zhuǎn)載于:https://www.cnblogs.com/jixiaosa/p/10261778.html
總結(jié)
以上是生活随笔為你收集整理的.Net Core中Dapper的使用详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 函数类型:有参函数、无参函数、匿名函数、
- 下一篇: 电子书下载:Ultra-Fast ASP