一般CRUD情境
假設要新增、修改使用者的證照清單,操作範例如下:
- 證照清單 Model
依據資料表License建立一個Model為TLicense
namespace TestService.Models { /// <summary> /// 證照資料 /// </summary> public class TLicense { /// <summary> /// 流水號 /// </summary> public int no { get; set; } /// <summary> /// 證照種類 /// </summary> public string licn_typ { get; set; } /// <summary> /// 證照名稱 /// </summary> public string licn_name { get; set; } /// <summary> /// 發照單位 /// </summary> public string licn_unit { get; set; } } }
- 新增
using (var connection = new SqlConnection(connectionString)) { connection.Open(); using (var transaction = connection.BeginTransaction()) { try { TLicense license = new() { licn_typ = "證照種類", licn_name = "證照名稱", licn_unit = "發照單位" }; var InsertSql = @"INSERT INTO License([licn_typ],[licn_name],[licn_unit]) VALUES(@licn_typ, @licn_name, @licn_unit)"; var parameters = new DynamicParameters(license); var result = connection.Execute(InsertSql, parameters, transaction); // 提交事務 transaction.Commit(); } catch (Exception ex) { // 發生例外,回滾事務 transaction.Rollback(); // 處理例外 // ... } } }
- 修改
using (var connection = new SqlConnection(connectionString)) { connection.Open(); using (var transaction = connection.BeginTransaction()) { try { TLicense license = new() { licn_typ = "證照種類", licn_name = "證照名稱", licn_unit = "發照單位" }; var UpdatetSql = @"Update License Set [licn_typ] = @licn_typ, [licn_name] = @licn_name, [licn_unit] = @licn_unit Where [no] = @no"; var parameters = new DynamicParameters(license); var result = connection.Execute(InsertSql, parameters, transaction); // 提交事務 transaction.Commit(); } catch (Exception ex) { // 發生例外,回滾事務 transaction.Rollback(); // 處理例外 // ... } } }
使用Dapper.Contrib
接下來是使用Dapper.Contrib CRUD的範例
-
證照清單 Model 依據資料表License建立一個Model為TLicense
using Dapper.Contrib.Extensions; namespace TestService.Models { /// <summary> /// 證照資料 /// </summary> [Table("License")] public class TLicense { /// <summary> /// 流水號 /// </summary> [Key] public int no { get; set; } /// <summary> /// 證照種類 /// </summary> public string licn_typ { get; set; } /// <summary> /// 證照名稱 /// </summary> public string licn_name { get; set; } /// <summary> /// 發照單位 /// </summary> public string licn_unit { get; set; } } }
- 添加 [Table(“TableName”)] 以便對應正確的資料表,才不會在做Contrib CRUD出現問題
- 於欄位 no 加上[key], 因為此欄位是自動編號
-
新增
using (var connection = new SqlConnection(connectionString)) { connection.Open(); using (var transaction = connection.BeginTransaction()) { try { TLicense license = new() { licn_typ = "證照種類", licn_name = "證照名稱", licn_unit = "發照單位" }; var result = connection.Insert(license, transaction); // 提交事務 transaction.Commit(); } catch (Exception ex) { // 發生例外,回滾事務 transaction.Rollback(); // 處理例外 // ... } } }
-
修改
using (var connection = new SqlConnection(connectionString)) { connection.Open(); using (var transaction = connection.BeginTransaction()) { try { TLicense license = new() { no = 1 licn_typ = "證照種類", licn_name = "證照名稱", licn_unit = "發照單位" }; var result = connection.Update(license, transaction); // 提交事務 transaction.Commit(); } catch (Exception ex) { // 發生例外,回滾事務 transaction.Rollback(); // 處理例外 // ... } } }
-
刪除
using (var connection = new SqlConnection(connectionString)) { connection.Open(); using (var transaction = connection.BeginTransaction()) { try { TLicense license = new() { no = 1 }; var result = connection.Delete(license, transaction); // 提交事務 transaction.Commit(); } catch (Exception ex) { // 發生例外,回滾事務 transaction.Rollback(); // 處理例外 // ... } } }
-
查詢
using (var connection = new SqlConnection(connectionString)) { connection.Open(); using (var transaction = connection.BeginTransaction()) { try { TLicense license = new() { no = 1 }; var result = connection.Get<TLicense>(license.no, transaction); // 提交事務 transaction.Commit(); } catch (Exception ex) { // 發生例外,回滾事務 transaction.Rollback(); // 處理例外 // ... } } }
結論
Dapper.Contrib 省下我們寫SQL指令以及參數設定簡化,當然這些是比較單純的狀況下很好運行,還是得視專案功能需求來調整使用的時機。