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 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相关推荐
- ELK日志分析Elasticsearch模块——语法基础CRUD
摘要: ElastICsearch的基本操作:增删改查,有必要了解,以备不时之需. 增删改查是数据库的基础操作方法.ES 虽然不是数据库,但是很多场合下,都被人们当做一个文档型 NoSQL 数据库在使 ...
- Django REST framework的各种技巧——1.基础讲解
写在最上面的话 django是一个神奇的框架,而restframework又是遵循了这个框架的另一个神奇的框架,然而由于restframework的文档稀烂无比,很多时候你必须看源码才能写出科学的代码 ...
- Dapper使用技巧
Dapper介绍 Dapper是轻量级的.net ORM框架,配合linq和泛型,让C#操作数据的代码简洁.高效又灵活!最近的工作项目中使用了Dapper,在这里分享一些实用技巧.阅读之前需要了解一些 ...
- airpods二代圆点按钮是啥_AirPods 2 使用技巧(基础篇)| 如何分辨两代 AirPods?
随着 AirPods 2 的发布,不少等待已久的用户纷纷购入,不少用户都是首次使用 AirPods,我们能来看看 AirPods 有哪些基础的入门使用技巧吧. 如何更改 AirPods 名称? ● 打 ...
- 搜索引擎优化技巧之基础篇
搜索引擎优化是一项复杂的 网络营销 策略性工作,虽然它是一个长期的战略.但如果一旦做的很好,那么网站的流量和转化率也是显而易见的.以下是笔者多年的一些SEO技术来分享给大家来实现一个好网站优化. 文章 ...
- 数据库 SQL 语言 基础CRUD操作
SQL 语言 1. 概括 SQL:Structure Query Language(结构化查询语言),SQL被美国国家标准局(ANSI)确定为关 系型数据库语言的美国标准,后来被国际化标准组织(I ...
- MyBatis基础-CRUD
一.mybatis 环境搭建步骤 第一步:创建 maven 工程 第二步:导入坐标 第三步:编写必要代码(实体类和持久层接口) 第四步:编写 SqlMapConfig.xml 第五步:编写映射配置文 ...
- 数独技巧-基础摒除法
基础摒除法就是利用1 - 9 的数字在每一行.每一列.每一个九宫格都只能出现一次的规则进行解题的方法. 基础摒除法可以分为行摒除.列摒除.九宫格摒除. 实际寻找解的过程为: 寻找九宫格摒除解:找到 ...
- 技巧 | 使用基础绘图系统绘制「森林图」
森林图可以很直观地表达数学模型的结果,尤其是在对比多种情境的结果时. R语言中有一些专门绘制森林图的工具包,不过小编目前还没仔细研究过.实际上,通过基础绘图系统的一些简单函数的组合使用就能绘制森林图. ...
- C#作业三:连接数据库并实现基础CRUD操作
一.目的要求 1.请设计一个项目连接到自己的MySQL数据库,数据库包含至少三张表: 2.使用dataGridView控件显示表中的数据: 3.实现基本crud操作: 二.实验过程 1.连接数据库 参 ...
最新文章
- 链表问题4——反转双向链表
- 根据类名与字段名称取值(可用于循环取实体所有值非常好用)
- (linux中alias的用法)给一些常用的长命令取别名
- Domain Driven Design and Development In Practice--转载
- 《Go 语言编程之旅》送煎架和站长写的书
- WEB漏洞扫描软件:Uniscan
- sdk manager的列表怎么消失了_腾讯安全SDK的Dll Dump研究
- Gym 100818I Olympic Parade(位运算)
- MacOS之Chrome弹框:代理要求提供用户名和密码(已解决)
- 龙将加速浏览器_360安全浏览器正式进军政企市场 积极适配中国芯
- fill和memset的区别
- 走一条硬件工程师的道路
- 酷派Y60-C1刷官方ROM
- java sqlserver 图书馆管理系统_基于JAVA+SQLServer的图书馆管理系统.doc
- wifi信号增强android,WiFi信号增强放大器
- Mac 文本对比工具(比较两份文件差异)
- 前端工程师必备的ps技巧 — 切图
- windows上装Ubuntu
- YOCTO开机画面修改
- 关于gcc -m32 -o 编译错误: /usr/bin/ld: cannot find -lgcc