Dapper使用技巧和基础CRUD
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Dapper使用技巧和基础CRUD相关的知识,希望对你有一定的参考价值。
Dapper使用技巧和基础CRUD
一、使用模型的增删改查。
- 建立测试模型,模型名称可以和表名不同。
class ATest { public int ID { get; set; } public string Name { get; set; } public string Code { get; set; } }
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 [email protected]"; 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 [email protected] where [email protected]"; 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动态项目管理。
以上是关于Dapper使用技巧和基础CRUD的主要内容,如果未能解决你的问题,请参考以下文章