的实现方法 NET核心适配器操作mysql数据库
前言
现在ORM流行起来,市场上出现了N个不同的ORM包。今天我们不谈EF,不谈黑马,只谈Dapper。如何在中使用Dapper操作Mysql数据库?NET Core,我们跟着镜头走(手动调低)。
配置文章
俗话说,如果你想做好事,你必须先磨快你的工具。首先介绍一下MySql的Nuget包。数据.有人可能有黑脸,怎么介绍。也罢,为了你的骨头惊喜,我就告诉你,两个办法:
第一条路
安装包MySQL。data-8 . 0 . 15版复制上述命令行,并在包管理控制台中执行。什么事?您不知道包管理控制台是什么。OMG,就这样吧,为了你的骨头惊喜,我告诉你
手动点路径:工具 NuGet包管理器包管理控制台
第二条路
手点路径:右键需要导入包的项目依赖关系管理NuGet包浏览进入MySql。数据
直接安装就可以了,因为我已经安装好了,所以这里是卸载或者更新
同样,您需要介绍:
微软教学文章。aspnetcore . all MySQL . data . entityframeworkore,dapper Microsoft。扩展。配置。抽象。extensions . configuration . file extensions Microsoft . extensions . configuration . JSON。
玩过的人。NET Core知道配置文件通常放在appsettings.json文件中,但是有一个问题。如果我们使用数据库连接字符串,直接存储明文用户名和密码,真的安全吗?我们这里不讨论安全问题。我们在连接字符串中使用占位符来控制我们的多数据库情况,然后使用userName和passWord作为我们的密码(稍后将被替换),因此它看起来像这样:
连接字符串' : { '默认连接' : ' server=server端口=端口号;数据库=赛舟会{ 0 };SslMode=无;uid=用户名;pwd=passWord允许用户变量=真' },接下来,我们创建一个新的基本存储库,用于读取配置和设置MySqlConnection:
公共类base repository : IDisposable {公共静态iconfigulationroot Configuration { get;设置;}私有MySqlConnection connpublic MySQL connection getMySQL connection(int regattaId=0,bool open=true,bool convertZeroDatetime=false,bool allowZeroDatetime=false){ iconfigulationbuilder builder=new configuration builder()。SetBasePath(目录。GetCurrentDirectory())。AddJsonFile(' appsettings . JSON ');配置=构建器。build();字符串cs=配置。GetConnectionString(' DefaultConnection ');cs=regattaId==0?字符串。格式(cs,字符串。空):字符串。格式(cs,' _' regattaId。ToString());Cs=cs。替换('用户名','真实账号')。替换(' PassPort ','真实密码');var csb=new MySQL connectionstringbuilder(cs){ AllowZeroDateTime=AllowZeroDateTime,convertzerrodatetime=convertzerrodatetime };conn=新MySqlConnection(csb。ConnectionString);返回conn}public void Dispose(){if (conn!=空连接状态!=系统。data . connectionstate . closed){ conn . Close();}}}好了,创作完了,应该怎么用?例如,有一个用于操作数据库的CrewManagerRepository类,我们只需要让这个类继承BaseRepository。例子如下
///摘要///根据赛事身份证、用户身份获取用户基本信息////summary///param name=' ReGattaid '赛事Id/param ///param名称='userId '用户id/param/返回/返回公共异步任务实体对象FindUserByAccount(int regattaId,int userId) { try { var cmdText=@ '选择b.id_number作为IdentifierId,b.isvalid作为isvalid,a.name作为名称,a.userid作为内化,a .性作为SexTypeId,a.age作为年龄,c.isprofessional作为isprofessional,c.role_type作为RoleTypeId,a.weight作为体重,身高作为高度,如电话号码作为PhoneNumber,a.thumb_image表1 a左连接表a.userid上的=b.id左连接表b.id=c.centralid上的3 c,其中[电子邮件受保护];//此处可以根据传入的regattaId访问不同的数据库使用(var conn=GetMySqlConnection(regattaId)){ if(conn . State==ConnectionState .closed){ await conn . OpenAsync();} var memberModel=conn .Query实体对象(cmdText,new { userId=userId },commandType: CommandType .文字)。first ordefault();返回memberModel?new MemberDetail();} } catch (Exception ex) { _logger .日志错误(例如,"按标识查找用户帐户失败!");扔;} }那有同学可能有黑人脸出现了,如果需要事务呢(露出嘴角的微笑)?
public async Taskbool delete XXX(int regattaId,int id,int userId){ var result=false;使用(var conn=GetMySqlConnection(regattaId)){ if(conn . State==ConnectionState .closed){ await conn . OpenAsync();}使用(var transaction=conn . BeginTransaction()){ 0尝试{ const string SqldelClub=@ ' delete from表名在哪里字段[电子邮件受保护];从.删除表名2在哪里字段[电子邮件受保护];从.删除表名3在哪里字段[电子邮件保护]和[电子邮件受保护];等待conn . querysync(sqldelclub,new { clubId=id,userId=userId,},commandType: CommandType .文本);交易commit();结果=真;}捕获(例外e){ 0控制台写入行(e);交易回滚();结果=假;扔;} }返回结果;} }这样,用交易将执行代码块包起来,如果出现异常,在捕捉中进行回滚(回滚事务),就可以保证了数据的一致性。如果是高并发场景,可能还会需要用到锁,这里暂时不做延伸讨论。
如果是返回集合,也很容易处理:
公共异步任务列表实体getclubbyuserid(int regattaId,int userId){ 0使用(var conn=GetMySqlConnection(regattaId)){ if(conn . State==ConnectionState .closed){ await conn . OpenAsync();} const string sql=@ '选择b.club_id作为id,c.name,c.image作为ImageData,c.year,c.address,c.creator,c.description,b.contact,b.phone,b.isvalid from表1 a左连接表2 b on a.clubinfo_id=b.club_id左加入表3 c on b.clubbase_id=c.club_id,其中[电子邮件受保护]_ ID ';目录实体clubDetailList=(等待conn . QueryAsync实体(sql,新的{ user_Id=userId },命令类型:命令类型.文本))。to list();返回clubDetailList} }关于衣冠楚楚的的示例本文就讲到这儿,大家可以上官网浏览了解更多:
https://dapper-tutorial.net/
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
版权声明:的实现方法 NET核心适配器操作mysql数据库是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。