第14章 多数据库支持之MySql

news2025/1/17 21:35:08

    对于一个工程性程序而言,是否支持对多数据库的CURD操作,不是必须的,只是为了预防程序部署和运行过程中如果因为版权问题而产生的额外成本而预留的退路。对于移动设备的前后端分离程序而言,如果数据库需要部署到移动设备中,那么最好的数据库选择就是:SQLite(移动端数据库),所以这种应用场景工程性程序就必须对多数据库进行支持。

    对于多数据库支持而言SqlSugar中间件是最为强大和方便的,其次是FluentMigrator中间件,二者本身都能完全实现对多数据库的支持。Microsoft.EntityFrameworkCore中间件本身并不能完全支持多数据库,对于MySql数据库的支持而言,就需要Microsoft.EntityFrameworkCore中间件与MySql.Data.EntityFrameworkCore中间件或Pomelo.EntityFrameworkCore中间件相互配合才能实现对MySql数据库的CURD操作。对于.Net程序来说不管MySql.Data.EntityFrameworkCore中间件或Pomelo.EntityFrameworkCore中间件,都是第3方中间件;对于MySql数据库来说MySql.Data.EntityFrameworkCore中间件是内置中间件(二都由Oracle开发),而Pomelo.EntityFrameworkCore中间件则是第3方中间件,但是在具体使用时却恰恰相反,由于MySql.Data.EntityFrameworkCore中间件Bug比较多,所以不推荐使用,反则Pomelo.EntityFrameworkCore中间件由于Bug少从而在程序中被广泛使用。

    说实话在这3个CURD中间件中如果SqlSugar中间件能够去除实体中的特性耦合,SqlSugar中间件功能强大使用简单,符合国内使用的特点,是最好的选择。

1 在Data项目中引用Pomelo.EntityFrameworkCore.MySql

2 在“appsettings.json”文件中设置多数据库初始化所需要数据

    "ConnectionStrings": {

      //Trusted_Connection=true或Integrated Security=true/SSPI:“Windows凭据”对SQL Server进行身份验证,表示可以在不知道数据库用户名和密码的情况下时,依然可以连接SQL Server数据库。

      //"integrated":"security=true是通过“Windows身份认证”对SQL Server数据库进行身份验证,并与SQL Server数据库进行连接;表示可以在不知道数据库用户名和密码的情况下时,依然可以连接SQL Server数据库,如果integrated", "security=false","或者不写,表示一定要输入正确的数据库登录名和密码。": null。

      //Persist Security Info:该配置只用于通过“SQL Server身份认证”对SQL Server数据库进行身份验证,并与SQL Server数据库进行连接;简单的理解为"ADO在数据库连接成功后是否保存密码信息",True表示保存,False表示不保存.ADO缺省为True(ADO.net缺省为False,未测试,根据参考资料上说的)。

      //MultipleActiveResultSets:它允许在单个连接上执行多重的数据库查询或存储过程,目前只适用于Sql Server 2005及其以上版本;如果不用MultipleActiveResultSets ,则一般报错为sqldatareader未关闭,即需要关闭了之后才能打开另一个。

      //Trust Server Certificate:是否使用SSL证书和加密方式,对SQL Server数据库的连接字符串进行加密,该操作属性安全性配置,目前只适用于Sql Server 2005及其以上版本;

      //"SqlServerWindows": "Data Source=.;Initial Catalog=ShopDemo;Integrated Security=true;MultipleActiveResultSets=true;Trust Server Certificate=True"

      //IIS发布部署连接字符串必须使用“SQL Server身份认证”数据库连接方式,才能实现发布部署程序与数据库的CURD的操作

      //"SqlServerSQL": "Data Source=.;Initial Catalog=ShopDemo;Integrated Security=False;Persist Security Info=False;User ID=zz;Password=zz;MultipleActiveResultSets=true;Trust Server Certificate=True",

      //Character Set=utf8_general_ci;mysql数据库的字符串查询操作禁用大小写敏感配置。

      //Character Set=utf8_bin;mysql数据库的字符串查询操作启用大小写敏感配置,注意:但配置配置在连接字符串中无效。

      "MySQL": "Server=localhost;port=3306;Database=ShopDemo;Uid=root;Pwd=zhoujian;Character Set=utf8_general_ci;"

    },

3 在Program.cs定义多数据库依赖注入中间件

//“Microsoft.EntityFrameworkCore.SqlServer”中间件实例,依赖注入到.Net(Core)6框架内置容器中。

builder.Services.AddDbContext<EFCoreContext>(

    //通过“DbContextOptionsBuilder”实例中的参数实例,为“Microsoft.EntityFrameworkCore.SqlServer”中间件的实例化提供参数实例,

    //最终把“Microsoft.EntityFrameworkCore.SqlServer”中间件实例,依赖注入到.Net(Core)6框架内置容器中。

    //IIS发布部署连接字符串必须使用“SQL Server身份认证数据库连接方式,才能实现发布部署程序与数据库的CURD的操作。

    //options => options.UseSqlServer(builder.Configuration.GetConnectionString("SqlServerSQL"))

    //实现“Microsoft.EntityFrameworkCore”中间件实例与“MySql”数据库的连接。

    options => options.UseMySql(builder.Configuration.GetConnectionString("MySQL"), MySqlServerVersion.LatestSupportedServerVersion)

    );

4 WebApi.Controllers.MulDatabaseTestController

using Core.Domain.Users;

using Data;

using Data.Extensions;

using Microsoft.AspNetCore.Mvc;

namespace WebApi.Controllers

{

    [Route("[controller]/[action]")]

    [ApiController]

    public class MulDatabaseTestController : ControllerBase

    {

        #region 拷贝构造方法与变量

        private readonly EFCoreContext _context;

        public MulDatabaseTestController(EFCoreContext context)

        {

            _context = context;

        }

        #endregion

        #region 方法

        /// <summary>

        /// 【获取角色列表--需权限】

        /// </summary>

        /// <remarks>

        /// 摘要:

        ///     从角色表中获取角色实体的所有实例,并把这些实例存储到列表实例中。

        /// </remarks>

        /// <returns>

        /// 返回:

        ///     列表实例,该实例存储着角色实体的所有实例。

        /// </returns>

        [HttpGet]

        public async Task<List<Role>> GetRoleListAsync()

        {

            //通过“Microsoft.EntityFrameworkCore”实例以Code-First方式删除和创建数据库。

            //_context.Database.EnsureDeleted();

            //_context.Database.EnsureCreated();

            return await _context.GetDbSet<Role>().ToListAsync();

        }

        #endregion

    }

}

对以上功能更为具体实现和注释见:230112_008shopDemo(多数据库支持之MySql)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/158663.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【UE4 第一人称射击游戏】42-消耗和重新装载“M4A1”弹药

上一篇&#xff1a;【UE4 第一人称射击游戏】41-让“M4A1”拥有独立的弹药系统本篇效果&#xff1a;可以看到当玩家拾取了“M4A1”后&#xff0c;实现了重新装弹的功能&#xff0c;与“AK47”的弹药系统是相互独立的。步骤&#xff1a;打开“ThirdPersonCharacter”&#xff0c…

PHP session反序列化漏洞原理解析

什么是session 官方Session定义&#xff1a;在计算机中&#xff0c;尤其是在网络应用中&#xff0c;称为“会话控制”。Session对象存储特定用户会话所需的属性及配置信息。主要有以下特点&#xff1a; session保存的位置是在服务器端 session通常是要配合cookie使用 因为HTTP…

Docker Swarm NFS 数据持久化存储

目录一、Swarm 集群部署二、NFS 服务部署三、Swarm 使用 NFS3.1 通过 Volume3.1.1 创建 Volume3.1.2 使用 Volume3.1.3 验证数据共享特性3.2 通过 Docker Stack3.2.1 创建 YAML 文件3.2.2 使用 YAML 文件3.2.3 验证数据共享特性一、Swarm 集群部署 可参考我前面的博客《基于 L…

从数据到价值,DataOps精益数据运营概述

作者&#xff1a;陈荣耀 阿里云全球技术服务团队 一、背景&挑战 数字化时代&#xff0c;企业希望借助数字化的技术能力来提升企业的经营能力&#xff0c;从最终业务目标上来看&#xff0c;一般分三类&#xff1a; 1. 增加收入&#xff1a;基于经营数据的智能分析来提升产…

24、TORCH.UTILS.DATA

PyTorch 数据加载实用程序的核心是 torch.utils.data.DataLoader 类。它代表一个可在数据集上迭代的 Python&#xff0c;支持map-style and iterable-style datasets,customizing data loading order,automatic batching,single- and multi-process data loading,automatic mem…

CTK Plugin Framework插件框架学习--服务追踪

文章目录一、前言二、新建插件PluginA三、新建插件PluginB四、测试一、前言 服务追踪&#xff1a;如果想在B插件里使用A服务&#xff0c;可以专门写一个类继承ctkServiceTracker&#xff0c;在这个类里完成对A服务的底层操作&#xff0c;然后在B插件里通过这个类提供的接口来使…

重庆市市长胡衡华会见深兰科技董事长陈海波一行

1月9日&#xff0c;重庆市市长胡衡华会见了赴渝考察调研的深兰科技集团创始人、董事长陈海波一行&#xff0c;双方就开展互利合作进行了深入交流。胡衡华市长会见深兰科技考察团重庆市委常委、副市长陈鸣波&#xff0c;市政府秘书长、办公厅主任欧顺清&#xff0c;市政府副秘书…

ResT: An Efficient Transformer for Visual Recognition

文章地址: https://arxiv.org/pdf/2105.13677.pdf codeResT: An Efficient Transformer for Visual Recognition一、引言二、ResT一、Transformer模块的再思考二、Efficient Transformer Block三、Patch Embedding四、Positional Encoding五、整体架构三、实验一、分类二、目标…

go import package 入门lib1 is not in GOROOT

main.go:4:2: package lib1 is not in GOROOT (/usr/local/go/src/lib1)├── 5-init│ ├── lib1│ │ └── lib1.go│ └── lib2│ └── lib2.go├── const.go├── firstVar.go├── go.mod├── helloGolang.go├── main.go└── test3function.gogo env …

Java学习之单例设计模式

目录 设计模式 单例模式 一、饿汉式 二、懒汉式 三、饿汉式VS懒汉式 总结 设计模式 1.静态方法和属性的经典使用 2.设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格以及解决问题的思考方式。就像是经典的棋谱&#xff0c;不同的棋局&#xff0c;我们用…

连接查询之外连接(左外链接和右外连接)

内连接&#xff1a; 假设A表和B表进行连接查询&#xff0c;使用内连接的话&#xff0c;凡是A表和B表能够匹配上的记录被查询出来&#xff0c;这就是内连接。A、B两张表没有主副之分&#xff0c;两张表是平等的。 外连接&#xff1a; 假设A表和B表进行连接查询&#xff0c;使用…

对于html中div标签height属性的个人理解

对于没有系统学习过css的程序员来说&#xff0c;在编写css样式的时候&#xff0c;div的height属性值确实是个玄学的东西&#xff0c;我也感觉css确实挺玄学的&#xff0c;本文将介绍我对div标签height属性的个人理解&#xff0c;如有问题请指正。 在html中&#xff0c;div标签属…

xilinx srio ip学习笔记之srio example

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 xilinx srio ip学习笔记之srio example前言IP的配置例程前言 前面对SRIO的理论有了初步的理解&#xff0c;现在急需要通过理解例程并且修改例程来建立自信心了。 学东西确实…

Java版本TransH代码的学习

主要讲和TransE代码的区别&#xff0c;TransE文章的链接 Java版本TransE代码的学习 关于范数的概念 什么是0范数、1范数、2范数&#xff1f;区别又是什么 初始化向量 初始化关系平面的向量Wr&#xff0c;初始化向量relation_vec,初始化节点向量entity_vec Wr_vec new doub…

富豪酒店集团全新体验「METAGREEN」上线!边玩边赚,了解可持续发展!

富豪酒店集团推出 MetaGreen 以提高大众对可持续发展的认识&#xff0c;并创造一个多元化的绿色生态系统。 体验将包涵盖数个独特的互动地标&#xff0c;包括环保富豪酒店、大华银行艺术空间、恒生银行元宇宙分行&#xff0c;以及 citysuper、LOG-ON 和 The Mills 等零售商。 …

擎创技术流 | ClickHouse实用工具—ckman教程(9)

哈喽~大家好&#xff0c;时间倏然&#xff0c;上一次ckman分享还是在2022&#xff0c;这一期分享就已经是2023了。由于前段时间小编“成功加入羊群”&#xff0c;导致拖更一周&#xff0c;实在抱歉。希望新的一年大家都可以身体健健康康&#xff0c;事业红红火火&#xff0c;生…

Clarifying Question领域最常见的三个数据集

文章目录Qulacqulac.json:qulac_hist012_dict.tar.gz:MIMICSClariQConvAI3 Data ChallengeStage1: initial datasetStage2: human-in-the-loopClariQ DatasetFile Formattrain.tsv and dev.tsvtest.tsvquestion_bank.tsvdev_synthetic.pkl.tar.gz & train_synthetic.pkl.ta…

【进阶】Spring核心思想及其项目创建

努力经营当下&#xff0c;直至未来明朗&#xff01; 文章目录一、Spring核心思想1. 容器2. IoC3. SpringIoC4. DI概念说明二、Spring的创建和使用1. 创建Spring项目3. Maven项目导入jar包和设置国内源的方法&#xff1a;2. Spring对象的存储/存储Bean对象3. 从Spring中读取到Be…

Electron自定义协议Protocol对web网站做数据交互,使用SSE实时数据推送到网站

(防盗镇楼)本文地址:https://blog.csdn.net/cbaili/article/details/128651549 前言 最近在撸VUE,想要实现一份代码既能构建Web又能构建Electron应用 并且能够判断环境是浏览器还是Electron,随后在Electron中做一些特定的事情 以往的Electron通信依靠IPC通信完成,但是发布到…

模板(template)包含与继承

Django 模板查找机制&#xff1a; Django 查找模板的过程是在每个 app 的 templates 文件夹中找&#xff08;而不只是当前 app 中的代码只在当前的 app 的 templates 文件夹中找&#xff09;。各个 app 的 templates 形成一个文件夹列表&#xff0c;Django 遍历这个列表&#x…