Dapper使用技巧和基础CRUD

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安全性,还是可操作性等各个方面来讲,遇到了互联网时代才发现能补上自古以来的短板,有效的提升管理的效率和业务水平。传统的管理模式,时间越久管理的内容越多,也需要更多的人来对数据进行整理,并且数据的汇总查询方面效率也是极其的低下,并且数据安全方面永远不会保证安全性能。结合数据内容管理的种种缺点,在互联网时代都可以得到有效的补充。结合先进的互联网技术,开发符合需求的软件,让数据内容管理不管是从录入的及时性,查看的及时性还是汇总分析的及时性,都能让正确率达到最高,管理更加的科学和便捷。本次开发的高校科研信息管理系统实现了操作日志管理、字典管理、反馈管理、公告管理、科研成果管理、科研项目管理、通知管理、学术活动管理、学院部门管理、科研人员管理、管理员管理等功能。系统用到了关系型数据库中王者MySql作为系统的数据库,有效的对数据进行安全的存储,有效的备份,对数据可靠性方面得到了保证。并且程序也具备程序需求的所有功能,使得操作性还是安全性都大大提高,让高校科研信息管理系统更能从理念走到现实,确确实实的让人们提升信息处理效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值