Dapper使用技巧和基础CRUD
Dapper使用技巧和基礎(chǔ)CRUD
一、使用模型的增刪改查。
?
2.建立數(shù)據(jù)庫
?
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.數(shù)據(jù)增刪改查
? ? 引用比較亂,做了一些測(cè)試,順便說說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的對(duì)象 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("------------刪除結(jié)束---------------"); 118 119 //測(cè)試插入單個(gè)對(duì)象 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("------------插入結(jié)束---------------"); 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("------------批量插入結(jié)束---------------"); 156 157 //修改,將上面list集合所有數(shù)據(jù)的name更改為周杰倫,直接用一個(gè)模型傳值進(jìn)去,運(yùn)行結(jié)果等價(jià)于 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("------------更新結(jié)束---------------"); 170 171 Console.ReadLine(); 172 173 }? ? ? 備注:傳入?yún)?shù)可以直接用模型,也可以用object new {Name="test",Code="Test"};這是我寫這個(gè)測(cè)試的重點(diǎn),因?yàn)橐郧奥犎苏f查Gooole,用DynamicParameters,我信了,走了很多彎路。包括還有一系列擴(kuò)展都嘗試過,比如Extendtions和Contrib,雖然幫助類多,反倒越麻煩了。尤其是寫擴(kuò)展[key]。
運(yùn)行結(jié)果:
二、不使用模型
1.不使用模型就是將上面的模型寫成 ?object paramer=new {key1=value1,key2=value2}的形式。還是很靈活。
2.Query的Dymaic類型,這個(gè)東西沒理解,就理解成匿名類還蠻好用,簡(jiǎn)單CRUD轉(zhuǎn)成json就和后臺(tái)無關(guān)。復(fù)雜的邏輯還沒想好怎么用它。
三、為什么要做這個(gè)測(cè)試
現(xiàn)在遇到的項(xiàng)目架構(gòu)比較老,基本都是寫sql,模型層也是sql拼起來的,和數(shù)據(jù)schema完全不一樣,幾百個(gè)表改起來實(shí)在麻煩,而且業(yè)務(wù)錯(cuò)綜復(fù)雜。做這個(gè)測(cè)試就是想實(shí)現(xiàn)全動(dòng)態(tài),不建立實(shí)體模型,后臺(tái)邏輯實(shí)現(xiàn)全動(dòng)態(tài)。
? ? ? ?這是基礎(chǔ)數(shù)據(jù)訪問層的思路和測(cè)試結(jié)果。下一篇寫搭建mvc動(dòng)態(tài)項(xiàng)目管理。
?
轉(zhuǎn)載于:https://www.cnblogs.com/coolbader/p/7803517.html
總結(jié)
以上是生活随笔為你收集整理的Dapper使用技巧和基础CRUD的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【ARM基础概念:ARMv7架构,ARM
- 下一篇: 九州8508机顶盒安装软件教程记录