Dapper使用技巧和基础CRUD
Dapper使用技巧和基礎CRUD
一、使用模型的增刪改查。
?
2.建立數據庫
?
1 CREATE TABLE [dbo].[ATest]( 2 3 [ID] [INT] IDENTITY(1,1) NOT NULL, 4 5 [Name] [VARCHAR](50) NULL, 6 7 [Code] [VARCHAR](50) NULL, 8 9 CONSTRAINT [PK_ATest] PRIMARY KEY CLUSTERED 10 11 ( 12 13 [ID] ASC 14 15 )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 16 17 ) ON [PRIMARY] 18 19 20 21 GO?
3.數據增刪改查
? ? 引用比較亂,做了一些測試,順便說說MongoDB.Driver也很好用,下次寫。
1 using System; 2 using System.Collections.Generic; 3 using System.Collections.ObjectModel; 4 using System.Collections; 5 using System.Linq; 6 using System.Text; 7 using System.Threading.Tasks; 8 using MongoDB.Bson; 9 using MongoDB.Driver; 10 using Dapper; 11 using System.Data; 12 using System.Data.SqlClient; 13 using AutoMapper.Mappers; 14 using MongoDBTest.Model.TableExtend; 15 using Newtonsoft.Json; 16 using Newtonsoft;?
1 static string conn = "data source=.;database=test;User ID=sa;Password=sa123456"; 2 3 public static IDbConnection DB = new SqlConnection(conn); 4 5 #region 帶模型的CRUD操作 6 7 /// <summary> 8 9 /// 插入test 10 11 /// </summary> 12 13 /// <param name="db"></param> 14 15 /// <param name="test"></param> 16 17 static void Insert(IDbConnection db, ATest test) 18 19 { 20 21 string sql = "insert into ATest (Name,Code) values (@Name,@Code)"; 22 23 db.Execute(sql, test); 24 25 } 26 27 /// <summary> 28 29 /// 批量插入 30 31 /// </summary> 32 33 /// <param name="db"></param> 34 35 /// <param name="test"></param> 36 37 static void BluckInsert(IDbConnection db, List<ATest> list) 38 39 { 40 41 string sql = "insert into ATest (Name,Code) values (@Name,@Code)"; 42 43 db.Execute(sql, list); 44 45 } 46 47 /// <summary> 48 49 /// 查找所有名稱為test的對象 50 51 /// </summary> 52 53 /// <param name="db"></param> 54 55 /// <returns></returns> 56 57 static IEnumerable<ATest> GetAlltest(IDbConnection db) 58 59 { 60 61 string sql = @"SELECT ID ,Name ,Code 62 63 FROM dbo.ATest where Name=@Name"; 64 65 return db.Query<ATest>(sql, new { Name = "test" }); 66 67 } 68 69 static IEnumerable<ATest> GetAll(IDbConnection db) 70 71 { 72 73 string sql = @"SELECT ID ,Name ,Code 74 75 FROM dbo.ATest "; 76 77 return db.Query<ATest>(sql); 78 79 } 80 81 /// <summary> 82 83 /// 刪除 84 85 /// </summary> 86 87 /// <param name="db"></param> 88 89 static void DeleteAll(IDbConnection db) { 90 91 string sql = "TRUNCATE TABLE dbo.ATest"; 92 93 db.Execute(sql); 94 95 } 96 97 static void Update(IDbConnection db, ATest test){ 98 99 string sql = "update ATest set Name=@Name where Code=@Code"; 100 101 db.Execute(sql, test); 102 103 } 104 105 106 107 #endregion 108 109 110 111 static void Main(string[] args) 112 113 { 114 115 DeleteAll(DB); 116 117 Console.WriteLine("------------刪除結束---------------"); 118 119 //測試插入單個對象 120 121 ATest test = new ATest() {Name="test",Code="Test" }; 122 123 Insert(DB,test); 124 125 var json= JsonConvert.SerializeObject(GetAll(DB)); 126 127 Console.WriteLine(json); 128 129 Console.WriteLine("------------插入結束---------------"); 130 131 //批量插入 132 133 List<ATest> list = new List<ATest>() { 134 135 136 137 new ATest(){ Name="test",Code="bluckinsert"}, 138 139 new ATest(){ Name="test",Code="bluckinsert"}, 140 141 new ATest(){ Name="test",Code="bluckinsert"}, 142 143 new ATest(){ Name="test",Code="bluckinsert"}, 144 145 new ATest(){ Name="test",Code="bluckinsert"}, 146 147 }; 148 149 BluckInsert(DB, list); 150 151 json = JsonConvert.SerializeObject(GetAll(DB)); 152 153 Console.WriteLine(json); 154 155 Console.WriteLine("------------批量插入結束---------------"); 156 157 //修改,將上面list集合所有數據的name更改為周杰倫,直接用一個模型傳值進去,運行結果等價于 paramer: new {Name="周杰倫",Code="bluckinsert"} 158 159 var updatemodel = list.FirstOrDefault(); 160 161 updatemodel.Name = "周杰倫"; 162 163 Update(DB, updatemodel); 164 165 json = JsonConvert.SerializeObject(GetAll(DB)); 166 167 Console.WriteLine(json); 168 169 Console.WriteLine("------------更新結束---------------"); 170 171 Console.ReadLine(); 172 173 }? ? ? 備注:傳入參數可以直接用模型,也可以用object new {Name="test",Code="Test"};這是我寫這個測試的重點,因為以前聽人說查Gooole,用DynamicParameters,我信了,走了很多彎路。包括還有一系列擴展都嘗試過,比如Extendtions和Contrib,雖然幫助類多,反倒越麻煩了。尤其是寫擴展[key]。
運行結果:
二、不使用模型
1.不使用模型就是將上面的模型寫成 ?object paramer=new {key1=value1,key2=value2}的形式。還是很靈活。
2.Query的Dymaic類型,這個東西沒理解,就理解成匿名類還蠻好用,簡單CRUD轉成json就和后臺無關。復雜的邏輯還沒想好怎么用它。
三、為什么要做這個測試
現在遇到的項目架構比較老,基本都是寫sql,模型層也是sql拼起來的,和數據schema完全不一樣,幾百個表改起來實在麻煩,而且業務錯綜復雜。做這個測試就是想實現全動態,不建立實體模型,后臺邏輯實現全動態。
? ? ? ?這是基礎數據訪問層的思路和測試結果。下一篇寫搭建mvc動態項目管理。
?
轉載于:https://www.cnblogs.com/coolbader/p/7803517.html
總結
以上是生活随笔為你收集整理的Dapper使用技巧和基础CRUD的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【ARM基础概念:ARMv7架构,ARM
- 下一篇: 九州8508机顶盒安装软件教程记录