范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

案例分享使用Dapper实现CRUD

  一、简介
  .Net平台下有非常多的ORM框架,ef(core)、dapper、nhibernate、sqlsugar、freesql等等,每个orm都有自己的特点,但性能这块还是dapper牛逼。二、使用案例
  创建一个Asp.Net Core Web Api 项目,接口文档可以参照上一篇文章介绍的Knife4j进行配置。项目引入依赖:	 	
  项目使用SqlServer数据库,需要创建一个数据库:Article,一张表Product
  建表脚本:CREATE TABLE [dbo].[Product]( 	[ProductId] [varchar](50) NOT NULL, 	[ProductName] [nvarchar](50) NOT NULL, 	[CategoryId] [nvarchar](50) NULL,  CONSTRAINT [PK_Product] PRIMARY KEY CLUSTERED  ( 	[ProductId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]
  新建数据库访问类:DataAccessusing System.Collections.Generic; using System.Threading.Tasks; using Microsoft.Data.SqlClient; using System.Data; using Dapper;  namespace ApiDoc.Controllers {     public class DataAccess     {         private readonly string ConnectionString = "Data Source=.;Initial Catalog=Article;User ID=sa;Password=数据库密码";          public async Task Execute(string sql, T entity)         {             using            IDbConnection connection = new SqlConnection(ConnectionString);             return await connection.ExecuteAsync(sql, entity);         }          public async Task> GetList(string sql, object param = null)         {             using          IDbConnection connection = new SqlConnection(ConnectionString);             return await connection.QueryAsync(sql, param);         }     } }
  新建产品类:Product    ///      /// 产品类     ///      public class Product     {         ///          /// 产品ID         ///          public string ProductId { get; set; }         ///          /// 产品名称         ///          public string ProductName { get; set; }         ///          /// 产品分组         ///          public string CategoryId { get; set; }     }
  新建控制器:ProductController[Route("api/[controller]")]     [ApiController]     public class ProductController : ControllerBase     {         ///          /// 读取单个         ///          ///          [HttpGet("Get")]         public async Task Get(string productId)         {             DataAccess dataAccess = new DataAccess();             var list = await dataAccess.GetList(#34;select * from Product where productId="{productId}"").ConfigureAwait(false);             return list.FirstOrDefault();         }         ///          /// 读取集合         ///          ///          [HttpGet("List")]         public async Task> List()         {             DataAccess dataAccess = new DataAccess();             return await dataAccess.GetList(#34;select * from Product ").ConfigureAwait(false);              //return new List() {             //    new Product { ProductId = "1", ProductName = "优质大米", CategoryId = "1" },             //    new Product { ProductId = "2", ProductName = "优质大豆", CategoryId = "1" },             //};         }         ///          /// 删除         ///          /// 主键         [HttpDelete("Delete")]         public async Task Delete(string productId)         {             DataAccess dataAccess = new DataAccess();             return await dataAccess.Execute($@"DELETE FROM [dbo].[Product]       WHERE [ProductId]="{productId}"", null);         }         ///          /// 新增         ///          /// 产品         [HttpPost("Add")]         public async Task Add(Product product)         {             DataAccess dataAccess = new DataAccess();             return await dataAccess.Execute(@"INSERT INTO [Product]            ([ProductId]            ,[ProductName]            ,[CategoryId])      VALUES            (@ProductId            ,@ProductName            ,@CategoryId)", product);         }         ///          /// 修改         ///          /// 产品         [HttpPut("Edit")]         public async Task Edit(Product product)         {             DataAccess dataAccess = new DataAccess();             return await dataAccess.Execute(                  $@"UPDATE [Product]    SET [ProductName] = @ProductName       ,[CategoryId] = @CategoryId  WHERE [ProductId]="{product.ProductId}"", product);         }     }
  准备好后,我们的项目是这样的:
  我们将控制器里面的List方法改为返回静态数据:
  运行项目,执行List方法我们得到一些测试数据:
  使用这些测试数据,我们进行新增
  新增完两条数据后,我们将List方法改回读数据库:
  执行List方法:
  剩余的修改和删除我就不一一演示了,整个过程非常简单可以动手试试。
  Dapper是一个IDbConnection对象的扩展库,增加了非常多的查询和执行命令的方法:
  大家可以根据自己的需求选择其中的方法。
  作为一个高性能的ORM其使用者也是非常多,为了弥补需要手写sql的缺点,社区内有非常多的扩展库比如:DapperExtensions 等可以实现无sql化。

九零年代前后播放的十部内地出品的武侠电视剧,怀旧感满满如今不仅武侠小说已经没落,就是曾经气势夺人的武侠剧也渐渐被观众所疏远,问题的症结似乎只有一点,那就是故事不行,或者干脆一味的炫技,却没有打动人心的故事情节。内地武侠剧制作的起步大约长月烬明34岁张芷溪与27岁白鹿上演母女戏,不尴尬吗?白鹿自周生如故之后,在圈内斩获了不少的人气与热度,由她主演的新剧警察荣誉上星央视之后,也收获了不错的收视率与口碑,看来白鹿真的要爆火呀!除此之外,白鹿还有一部古装剧备受瞩目,这部剧一路向前拍摄发生意外,两位武行演员落水去世,剧组尚未回应在影视剧的拍摄过程中,因为剧情的需要,有些剧情会伴随着一定的危险性,有的是因为场地很险要,有的是演员要做一些危险的动作,如果不做好防护,很容易出现一些事故。近些年,不少剧组都曾出现iPhone14Max将有重大升级,iPhone13为加速清仓一夜跌至谷底价有报道称,受疫情影响,iPhone14Max的生产将推迟3周,这让苹果现在非常焦虑。但随后,苹果分析师郭明錤写道,根据供应链消息,苹果不会改变iPhone14的发布计划。iPhon胯大腿粗的女人,选裤子遵循这3个原则,显瘦还很气质不知道大家有没有发现一个身边常见的问题,那就是很多懂穿搭女人,一般身材都不会太完美,她们每个人都有着或多或少的身材问题,比如腰线太低,容易穿出五五分大腿粗壮,穿紧身裤会踩雷假胯宽,互联网大厂员工感慨生活不易被裁后接连面试32家公司,全都被拒被裁员后又面试了32家公司均告失败曾经的大厂员工感叹生活不易2022年受多重因素影响,从年初开始,各互联网大厂就多次传出裁员的消息。根据网友爆料,有的部门甚至是被整个拿掉。为何这些3条原则,16个小点,帮你写出一个优秀的对外接口对外API接口设计安全性1创建appid,appkey和appsecret2Token令牌(过期失效)3Post请求4客户端IP白名单(可选)5单个接口针对IP限流(令牌桶限流,漏一颗有生命的行星一颗有生命的行星地球是唯一能让陆地和海洋生物繁衍生息之处。如果没有太阳提供的热量和光照,没有充足的水源,没有大气层的保护,没有岩石和矿物,没有这些地球生态系统的基础,生命终将灭亡。一颗有生命的行星2太阳和月球太阳和月球两者都对地球上的生命有直接的影响。没有太阳的能量,即它的光和热,就没有生命。太阳能加热了大气海洋和陆地,造成了各种各样的气候。因为地球以某种角度自转并且围绕太阳詹姆斯韦伯太空望远镜之后会发生什么?一些天文学家想要探索生命用于系外行星的大型干涉仪可以使用一系列工具来追踪新的系外行星和星系如果它能够起飞的话图注飞行和地面太空望远镜帮助天文学家寻找像55Cancrie(如上图所示)这样的系外行星。LIFASC科研探索锌对极地海洋中复杂生命的进化至关重要新的研究为我们为什么在极地海洋中拥有复杂的生命形式提供了第一个证据,并强调了全球变暖对它们构成的威胁。它揭示了微量金属锌的重要作用,没有它这些海洋将被剥夺比细菌更复杂的生物生命。多
株洲两个保交楼项目全面复工湖南日报4月7日讯(全媒体记者刘奕楠通讯员彭胤武)记者今天从省住建厅获悉,经核实,渤海银行株洲分行违规划扣商品房预售监管资金问题已完成整改,目前,北大资源株洲天池恒大株洲誉苑项目均未来科学城滨水公园两处免费露营地供撒欢儿北京日报客户端记者赵语涵不负春光,眼下正是露营踏青的好时节,京郊又一处郊野公园向游客开放露营地。记者4月9日从未来科学城集团获悉,未来科学城滨水公园近期开放三处露营地,其中,两处为科学家复活史前病毒?太坏啦巨型病毒复活2022年11月23日,据英国新科学家杂志报道,科学家们成功复活了在西伯利亚永久冻组成中冰冻个数万年的七种病毒,最年轻的被冻了27000年,而最古搞的则被冻了48500如何科学制定幼儿园带量食谱?一文讲透幼儿园周一到周五带量食谱如何制定?怎样才能达到妇保健相关要求?带您一文详细了解什么是带量食谱?带量食谱,是在花样食谱的基础上,在旁边注明每种食物的用量。合理的膳食计划要带量食谱来完全国各地区最低工资标准出炉你的工资不能低于这个数来源中国新闻网中新网北京4月8日电(记者李金磊)最新最低工资表公布。人社部网站近日发布了全国各地区最低工资标准情况(截至2023年4月1日),15个地区月最低工资标准在2000元及用阳光代替WiFi信号连网,沙特科学家这成果亮了詹士发自凹非寺量子位公众号QbitAI用阳光代替wifi信号,实现连网并传输数据,这可能么?有人做到了。沙特阿拉伯的研究者设计了一种智能玻璃系统。它能把窗子当成了调制解调器(也就是杜兆才放弃亚洲杯,与女老板亲密互动!陈戌源与2名神秘贵妇出游头条创作挑战赛通过社交媒体,媒体人秦云说杜兆才主动放弃男足亚洲杯的举办权,让地方财政,以及投资方血本无归。实际上,在我们球迷看来,杜兆才放弃亚洲杯举办权,是其在位期间唯一正确的事情全球首个藏文搜索引擎云藏受众覆盖全球76个国家(地区)中新社青海共和4月8日电(祁增蓓)青海省海南藏族自治州藏文信息技术研究中心综合部主任拉吉卓玛8日接受中新社记者采访时透露,全球首个藏文搜索引擎云藏自2016年8月上线运行以来,用户你还在刷手机到半夜?知道熬夜对身体的危害吗?随着智能手机的普及以及工作压力的增加,很多人都有晚睡的习惯,有的人是工作需要,不得不熬夜加班,而有的人是因为习惯晚睡。我自身也有这种体会,从十一点到十二点,甚至超过十二点。第二天总精足不思淫,神足不思眠,气足不思食,3个中成药,补精安神养气大家好,我是沈医生,中医有句俗话叫精足不思淫,神足不思眠,气足不思食,今天我给大家解释一下这句话的意思,并分享3个中成药,补肾生精,安神助眠,补脾益气,养好精气神。0第一个,精足不每天排队都要买的香酥饼,层次丰富酥掉渣,做法简单新手也能学会头条创作挑战赛每个人在一天都有最快乐的一时刻,我最快乐的就是排队去买香酥饼的时候。这道饼真的太香了,很难不让人沉迷。没有时间做饭的时候就一个饼一顿饭。吃得多了,自然就想自己复刻一次