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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Dapper的使用

發布時間:2024/5/14 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Dapper的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

它的運行速度非常快,語法簡單,能用很少的代碼就能實現多條SQL語句一起被執行以及批量增、刪、改。


下面列出其基本的用法:

首先創建對應的實體

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

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集合作為參數,批量的插入操作只需要一條sql語句即可,方便簡單

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語句,匿名參數)

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;}}
查詢某個指定的字段,(該字段屬于什么類型,在<>里填寫對應類型即可)

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>/// 若返回列表中的每個對象所包含的另1個對象也需要返回,則需要用到splitOn參數。/// 然而,如果第2個對象的分割列為Id,則可省略splitOn參數。 /// </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");}}

存儲過程的執行

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; }}對應的存儲過程為

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

/// <summary>/// 返回多個結果集/// </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









總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。