日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Dapper的使用

發(fā)布時(shí)間:2024/5/14 编程问答 60 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Dapper的使用 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Dapper.NET是個(gè)開源的輕型ORM。它擴(kuò)展了IDbConnection接口的功能,可以支持MS SQL Server、Oracle、MySQL、PostgreSQL、SQLite、SqlCe、Firebird等。

它的運(yùn)行速度非常快,語法簡(jiǎn)單,能用很少的代碼就能實(shí)現(xiàn)多條SQL語句一起被執(zhí)行以及批量增、刪、改。


下面列出其基本的用法:

首先創(chuàng)建對(duì)應(yīng)的實(shí)體

public class DapperDemoEntity{public int ID { get; set; }public string Test{ get; set; }}
新增單條記錄(dapperDemo就是要填寫的參數(shù))

public int InsertDapperDemo(DapperDemoEntity dapperDemo){using (IDbConnection connection = Common.OpenConnection()){const string sql = @"INSERT INTO dbo.DapperNETDemo(Test) VALUES (@Test);SELECT CAST(SCOPE_IDENTITY() AS INT)";int dapperDemoID = connection.Query<int>(sql, dapperDemo).Single();return dapperDemoID;}}


更新單條記錄

using (IDbConnection connection = Common.OpenConnection()){const string sql = @"UPDATE dbo.DapperNETDemo SET ParentID = @ParentID, WHERE ID = @ID";return connection.Execute(sql, dapperDemo);}


刪除單條記錄的用法也跟上面一樣,只是sql語句不同


批量插入,dapper支持list集合作為參數(shù),批量的插入操作只需要一條sql語句即可,方便簡(jiǎn)單

public int InsertDapperDemoList(IList<DapperDemoEntity> list){using (IDbConnection connection = Common.OpenConnection()){var transaction = connection.BeginTransaction();var rowsAffectd =0;const string sql = @"INSERT INTO dbo.DapperNETDemo(Test) VALUES (@Test)";try{rowsAffectd = connection.Execute(sql, list, transaction);transaction.Commit();return rowsAffectd;}catch (Exception){transaction.Rollback();throw;}}}
批量刪除 ,(這里介紹使用多條sql語句,匿名參數(shù))

public int DeleteDapperDemoList(int id){using (IDbConnection connection = Common.OpenConnection()){const string deleteChildSQL = @"DELETE FROM dbo.DapperNETDemo WHERE ID> 0 AND ID = @ID";const string deleteParentSQL = @"DELETE FROM dbo.DapperNETDemo WHERE ParentID < 1 AND ID = @ID";IDbTransaction transaction = connection.BeginTransaction();int rowsAffected = connection.Execute(deleteChildSQL, new { ID=id }, transaction);rowsAffected += connection.Execute(deleteParentSQL, new { ID = id }, transaction);transaction.Commit();return rowsAffected;}}
查詢某個(gè)指定的字段,(該字段屬于什么類型,在<>里填寫對(duì)應(yīng)類型即可)

public int GetChildDapperDemoCount(){using (IDbConnection connection = Common.OpenConnection()){const string sql = @"SELECT Test FROM dbo.DapperNETDemo where ID=1";return connection.ExecuteScalar<string>(sql);}}
獲取列表

public IEnumerable<DapperDemoEntity> GetDapperDemoList(){using (IDbConnection connection = Common.OpenConnection()){const string query =@"SELECT * FROM dbo.DapperNETDemo";return connection.Query<DapperDemoEntity>(query);}}
這里指出一種返回子父類的列表

public class DapperDemoEntity{public int ID { get; set; }public int ParentID { get; set; }public string DapperDemoName { get; set; }public Common.Type Type { get; set; }public DateTime ModifiedDate { get; set; } public DapperDemoParentEntity ParentDapperDemo { get; set; }}public class DapperDemoParentEntity{public int ParentID { get; set; }public string DapperDemoParentName { get; set; }public Common.Type ParentType { get; set; }}

/// <summary>/// 返回列表/// </summary>/// <returns></returns>/// <remarks>/// 若返回列表中的每個(gè)對(duì)象所包含的另1個(gè)對(duì)象也需要返回,則需要用到splitOn參數(shù)。/// 然而,如果第2個(gè)對(duì)象的分割列為Id,則可省略splitOn參數(shù)。 /// </remarks>public IEnumerable<DapperDemoEntity> GetChildDapperDemoWithParentList(){using (IDbConnection connection = Common.OpenConnection()){const string query = @"SELECT child.ID, child.Name AS DapperDemoName, child.[Type], child.ModifiedDate, parent.ID AS ParentID, parent.Name AS DapperDemoParentName, parent.[Type] AS ParentTypeFROM dbo.DapperNETDemo child WITH(NOLOCK)LEFT JOIN dbo.DapperNETDemo parent WITH(NOLOCK) ON parent.ID = child.ParentIDWHERE parent.ID IS NOT NULLORDER BY child.ModifiedDate DESC";return connection.Query<DapperDemoEntity, DapperDemoParentEntity, DapperDemoEntity>(query, (child, parent) => { child.ParentDapperDemo = parent; child.ParentID = parent.ParentID ;return child; }, splitOn: "ParentID");}}

存儲(chǔ)過程的執(zhí)行

public dynamic ProcedureWithOutAndReturnParameter1(){int successCode = -1;string resultMessage = string.Empty;using (IDbConnection connection = Common.OpenConnection()){DynamicParameters parameter = new DynamicParameters();string name = "test1";parameter.Add("@Name", name); parameter.Add("@SuccessCode", dbType: DbType.Int32, direction: ParameterDirection.Output);parameter.Add("@ResultMessage", dbType: DbType.String, direction: ParameterDirection.Output, size: 255);parameter.Add("@Result", dbType: DbType.Int32, direction: ParameterDirection.ReturnValue);IEnumerable<dynamic> result = connection.Query(sql: "DapperNETDemoSP1", param: parameter, commandType: CommandType.StoredProcedure);successCode = parameter.Get<int>("SuccessCode");resultMessage = parameter.Get<string>("ResultMessage");int s = parameter.Get<int>("Result");dynamic row = result.Single();return row; }}對(duì)應(yīng)的存儲(chǔ)過程為

ALTER PROCEDURE [dbo].[DapperNETDemoSP1]@Name VARCHAR(10), @SuccessCode INT OUTPUT,@ResultMessage VARCHAR(255) OUTPUT ASBEGINSELECT @Name AS NameResult SET @SuccessCode = 0SET @ResultMessage = '完成執(zhí)行'RETURN 42 END執(zhí)行存儲(chǔ)過程例子2

/// <summary>/// 返回多個(gè)結(jié)果集/// </summary>/// <returns></returns>public IEnumerable<dynamic> ProcedureWithOutAndReturnParameter2(){using (IDbConnection connection = Common.OpenConnection()){DynamicParameters parameter = new DynamicParameters();string name = "test2";parameter.Add("@Name", name); parameter.Add("@Result", dbType: DbType.Int32, direction: ParameterDirection.ReturnValue);IEnumerable<dynamic> resultA = null;IEnumerable<dynamic> resultB = null;using (SqlMapper.GridReader grid = connection.QueryMultiple(sql: "DapperNETDemoSP2", param: parameter, commandType: CommandType.StoredProcedure)){resultA = grid.Read<dynamic>();resultB = grid.Read<dynamic>();}List<dynamic> result = new List<dynamic>();result.Add(resultA.Single());result.Add(resultB.Single());return result;}} ALTER PROCEDURE [dbo].[DapperNETDemoSP2]@Name VARCHAR(10) ASBEGINSELECT @Name AS NameResult1SELECT 2 AS NameResult2 RETURN 2 END









總結(jié)

以上是生活随笔為你收集整理的Dapper的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。