Dapper使用技巧和基础CRUD

一、使用模型的增删改查。

  1. 建立测试模型,模型名称可以和表名不同。
     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相关推荐

  1. ELK日志分析Elasticsearch模块——语法基础CRUD

    摘要: ElastICsearch的基本操作:增删改查,有必要了解,以备不时之需. 增删改查是数据库的基础操作方法.ES 虽然不是数据库,但是很多场合下,都被人们当做一个文档型 NoSQL 数据库在使 ...

  2. Django REST framework的各种技巧——1.基础讲解

    写在最上面的话 django是一个神奇的框架,而restframework又是遵循了这个框架的另一个神奇的框架,然而由于restframework的文档稀烂无比,很多时候你必须看源码才能写出科学的代码 ...

  3. Dapper使用技巧

    Dapper介绍 Dapper是轻量级的.net ORM框架,配合linq和泛型,让C#操作数据的代码简洁.高效又灵活!最近的工作项目中使用了Dapper,在这里分享一些实用技巧.阅读之前需要了解一些 ...

  4. airpods二代圆点按钮是啥_AirPods 2 使用技巧(基础篇)| 如何分辨两代 AirPods?

    随着 AirPods 2 的发布,不少等待已久的用户纷纷购入,不少用户都是首次使用 AirPods,我们能来看看 AirPods 有哪些基础的入门使用技巧吧. 如何更改 AirPods 名称? ● 打 ...

  5. 搜索引擎优化技巧之基础篇

    搜索引擎优化是一项复杂的 网络营销 策略性工作,虽然它是一个长期的战略.但如果一旦做的很好,那么网站的流量和转化率也是显而易见的.以下是笔者多年的一些SEO技术来分享给大家来实现一个好网站优化. 文章 ...

  6. 数据库 SQL 语言 基础CRUD操作

    SQL 语言 1. 概括 ​ SQL:Structure Query Language(结构化查询语言),SQL被美国国家标准局(ANSI)确定为关 系型数据库语言的美国标准,后来被国际化标准组织(I ...

  7. MyBatis基础-CRUD

    一.mybatis  环境搭建步骤 第一步:创建 maven 工程 第二步:导入坐标 第三步:编写必要代码(实体类和持久层接口) 第四步:编写 SqlMapConfig.xml 第五步:编写映射配置文 ...

  8. 数独技巧-基础摒除法

      基础摒除法就是利用1 - 9 的数字在每一行.每一列.每一个九宫格都只能出现一次的规则进行解题的方法. 基础摒除法可以分为行摒除.列摒除.九宫格摒除. 实际寻找解的过程为: 寻找九宫格摒除解:找到 ...

  9. 技巧 | 使用基础绘图系统绘制「森林图」

    森林图可以很直观地表达数学模型的结果,尤其是在对比多种情境的结果时. R语言中有一些专门绘制森林图的工具包,不过小编目前还没仔细研究过.实际上,通过基础绘图系统的一些简单函数的组合使用就能绘制森林图. ...

  10. C#作业三:连接数据库并实现基础CRUD操作

    一.目的要求 1.请设计一个项目连接到自己的MySQL数据库,数据库包含至少三张表: 2.使用dataGridView控件显示表中的数据: 3.实现基本crud操作: 二.实验过程 1.连接数据库 参 ...

最新文章

  1. 链表问题4——反转双向链表
  2. 根据类名与字段名称取值(可用于循环取实体所有值非常好用)
  3. (linux中alias的用法)给一些常用的长命令取别名
  4. Domain Driven Design and Development In Practice--转载
  5. 《Go 语言编程之旅》送煎架和站长写的书
  6. WEB漏洞扫描软件:Uniscan
  7. sdk manager的列表怎么消失了_腾讯安全SDK的Dll Dump研究
  8. Gym 100818I Olympic Parade(位运算)
  9. MacOS之Chrome弹框:代理要求提供用户名和密码(已解决)
  10. 龙将加速浏览器_360安全浏览器正式进军政企市场 积极适配中国芯
  11. fill和memset的区别
  12. 走一条硬件工程师的道路
  13. 酷派Y60-C1刷官方ROM
  14. java sqlserver 图书馆管理系统_基于JAVA+SQLServer的图书馆管理系统.doc
  15. wifi信号增强android,WiFi信号增强放大器
  16. Mac 文本对比工具(比较两份文件差异)
  17. 前端工程师必备的ps技巧 — 切图
  18. windows上装Ubuntu
  19. YOCTO开机画面修改
  20. 关于gcc -m32 -o 编译错误: /usr/bin/ld: cannot find -lgcc

热门文章

  1. [其他][转载]ACM知识点分类
  2. 面向不平衡数据的电子病历自动分类研究
  3. 不改一行代码,快速迁移 Laravel 应用上云
  4. java excel公式计算_java中Excel公式的计算和函数,实例展示
  5. 十个精妙绝伦的SQL语句,说尽SQL精华
  6. Ubuntu下的“千千静听”-Audacious
  7. Win11如何退出磁贴桌面?
  8. android 获取短信中心号码,无法发短信,短信中心号码设置 解决办法!!!
  9. 程序员:新手到专家的5个阶段
  10. 使用squid内网代理百度地图