ASP.NET Core项目中使用SqlSugar连接多个数据库的方式

  之前学习ASP.NETCore及SqlSugar时都是只连接单个数据库处理数据,仅需在Program文件中添加ISqlSugarClient的单例即可(如下代码所示)。

builder.Services.AddSingleton<ISqlSugarClient>(s =>
{SqlSugarScope sqlSugar = new SqlSugarScope(new ConnectionConfig(){DbType = SqlSugar.DbType.SqlServer,ConnectionString = builder.Configuration.GetValue<string>("dbContext"),IsAutoCloseConnection = false,});return sqlSugar;
});

  如果需要连接多个数据库(不是跨数据库联查,仅是连两个数据库),第一时间想到的是创建多个全局实例,在需要的地方直接调用。原先使用Linq的时候经常这么干,每个DBContext对应一个数据库,程序启动时创建多个DBContext实例,然后在WebService中直接使用。
  百度“sqlsugar 多数据库”,不少文件介绍使用SqlSugar的多租户或仓储方式连接多数据,没有深入看下去,感觉很麻烦。最后参考百度搜索工具给的建议,创建包含多个ISqlSugarClient属性的类,每个属性对应一个数据库连接,然后调用builder.Services.AddSingleton注册实例服务。大致实现代码如下:

public class MultiDBClient
{public ISqlSugarClient DB1 { get; set; }public ISqlSugarClient DB2 { get; set; }
}builder.Services.AddSingleton<MultiDBClient>(s =>
{MultiDBClient client = new MultiDBClient();SqlSugarScope sqlSugar = new SqlSugarScope(new ConnectionConfig(){DbType = SqlSugar.DbType.SqlServer,ConnectionString = builder.Configuration.GetValue<string>("dbContext1"),IsAutoCloseConnection = true,});client.DB1 = sqlSugar;sqlSugar = new SqlSugarScope(new ConnectionConfig(){DbType = SqlSugar.DbType.SqlServer,ConnectionString = builder.Configuration.GetValue<string>("dbContext2"),IsAutoCloseConnection = true,});client.DB2 = sqlSugar;return client;
});public class ECDataController : ControllerBase
{private ISqlSugarClient m_sugarClient;public ECDataController(MultiDBClient client, IWebHostEnvironment env, ILoggerProvider logger){m_sugarClient=client.DB2;        }
}

  测试了上面的代码,在不同控制器类中按需获取相应的数据库连接使用即可。照着这种思路,针对不同的数据库定义不同的类也可以,全部注册为实例,在控制器类中按需使用可能更简单。

参考文献:
[1]https://www.donet5.com/Home/Doc

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

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

相关文章

flutter_quill如何设置Editor中的文字为富文本

比如一个场景 在输入框中&#xff0c;某某某 是一个颜色&#xff0c;其他文本是一个颜色 这里要注意 const QuillEditor({required this.controller,required this.focusNode,required this.scrollController,required this.scrollable,required this.padding,required this…

uniapp:封装商品列表为组件并使用

封装商品列表为组件并使用 商品组件封装 <template><!-- 商品列表 --><view class"goods_list"><view class"goods_item" v-for"item in goods" :key"item.id"><image :src"item.img_url">…

【AI系统】LLVM 架构设计和原理

LLVM 架构设计和原理 在上一篇文章中&#xff0c;我们详细探讨了 GCC 的编译过程和原理。然而&#xff0c;由于 GCC 存在代码耦合度高、难以进行独立操作以及庞大的代码量等缺点。正是由于对这些问题的意识&#xff0c;人们开始期待新一代编译器的出现。在本节&#xff0c;我们…

【C语言】结构体(二)

一&#xff0c;结构体的初始化 和其它类型变量一样&#xff0c;对结构体变量可以在定义时指定初始值 #include <stdio.h> #include <stdlib.h> struct books // 结构体类型 {char title[50];char author[50]; //结构体成员char subject[100];int book_id; }…

【docker】docker网络六种网络模式

Docker 网络模式总结 网络模式描述使用场景bridge默认的网络模式&#xff0c;容器之间通过虚拟网桥通信&#xff0c;容器与宿主机隔离。单机部署、本地开发、小型项目host容器与宿主机共享网络堆栈&#xff0c;容器直接使用宿主机的 IP 地址。高性能网络应用、日志处理、大量与…

四、初识C语言(4)

一、作业&#xff1a;static修饰局部变量 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <string.h> //作业&#xff1a;static修饰局部变量 int sum (int a) {int c 0;static int b 3;c 1;b 2;return (abc); } int main() {int i 0;int a …

【python】类方法和静态方法

类方法 通过classmethod装饰器实现 class A(object):bar 1classmethoddef class_foo(cls):print Hello, , clsprint cls.bar>>> A.class_foo() # 直接通过类来调用方法 Hello, <class __main__.A> 1在上面&#xff0c;我们使用了 classmethod 装饰方法 clas…

Linux 中的 ls 命令:从使用到源码解析

ls 命令是 Linux 系统中最常用和最基本的命令之一。下面将深入探讨 ls 命令的使用方法、工作原理、源码解析以及实际应用场景。 1. ls 命令的使用** ls 命令用于列出目录内容&#xff0c;显示文件和目录的详细信息。 1.1 基本用法 ls [选项] [文件或目录]例如&#xff1a; …

SQL 中SET @variable的使用

在 SQL 中&#xff0c;SET variable 用于声明和赋值用户定义的变量。具体来说&#xff0c; 符号用于表示一个局部变量&#xff0c;可以在 SQL 语句中存储和使用。它通常在存储过程、函数或简单的 SQL 查询中使用。 1. 声明并赋值给变量 你可以使用 SET 语句给一个变量赋值。例…

The selected directory is not a valid home for Go SDK

在idea里配置go语言的环境时&#xff0c;选择go语言的安装目录&#xff0c;一直提示这个 The selected directory is not a valid home for Go SDK后来查了一下&#xff0c;发现原来idea识别不出来 需要改一下配置文件&#xff0c;找到go环境的安装目录&#xff0c;我是默认安…

Leetcode581. 最短无序连续子数组(HOT100)

链接 我的代码&#xff1a; class Solution { public:int findUnsortedSubarray(vector<int>& nums) {vector<int> res nums;sort(res.begin(),res.end());int l 0,r nums.size()-1;while(nums[l]res[l]){l;if(lnums.size()){return 0;}}while(nums[r]res…

SQL优化与性能——数据库事务管理

数据库事务管理是数据库系统中至关重要的一部分&#xff0c;确保了数据的一致性、完整性、可靠性和隔离性。尤其在高并发、高负载的系统中&#xff0c;事务管理的设计和实现直接影响到系统的稳定性和性能。本章将详细探讨以下内容&#xff1a;事务的ACID特性、使用 BEGIN、COMM…

CentOS修改yum.repos.d源,避免“Could not resolve host: mirrorlist.centos.org”错误

1、问题现象 由于CentOS停止维护&#xff0c;mirrorlist.centos.org网站也关闭不可访问。导致CentOS默认配置的yum.repos.d源也不可用&#xff0c;所以执行yum命令会报“Could not resolve host: mirrorlist.centos.org”错误。具体如下&#xff1a; Could not retrieve mirror…

【Robocasa】Code Review

文章目录 OverviewalgoInitializationImportant Class MethodsTrain LoopTest Time ConfigsdemoConfig FactoryConfig StructureConfig Locking默认锁定状态配置修改的上下文管理器 dataset示例数据集对象参数说明 model基础模块EncoderCoreVisualCoreScanCore随机化器 (Random…

【单细胞数据库】癌症单细胞数据库CancerSEA

数据库地址&#xff1a;home (hrbmu.edu.cn) Cite Huating Yuan, Min Yan, Guanxiong Zhang, Wei Liu, Chunyu Deng, Gaoming Liao, Liwen Xu, Tao Luo, Haoteng Yan, Zhilin Long, Aiai Shi, Tingting Zhao, Yun Xiao, Xia Li, CancerSEA: a cancer single-cell state atlas…

在物联网软件开发中,常见的通信协议有哪些

在物联网 (IoT) 软件开发中&#xff0c;通信协议是关键部分&#xff0c;用于设备间以及设备与服务器之间的数据传输。以下是我收集总结的常见的通信协议及其特点&#xff1a; 1. 应用层协议 这些协议负责数据的格式化、传输和解读&#xff0c;常用于 IoT 设备与云服务或其他设…

React 的学习记录一:与 Vue 的相同点和区别

目录 一、学习目标 二、学习内容1️⃣——React的特点 1.组件化设计 2.单向数据流 3.声明式 UI 4.虚拟 DOM 5.Hooks 6.JSX 7.React Native 三、React与vue的比较总结 四、总结 一、学习目标 时间&#xff1a;两周 内容&#xff1a; React的特点React的入门React的…

深度学习-52-AI应用实战之基于Yolo8的目标检测自动标注

文章目录 1 YOLOv81.1 YOLOV8的不同版本1.2 可检测类别1.3 数据说明1.4 网络结构1.5 算法核心步骤2 目标检测的基本原理2.1 安装yolov8(cpu版本)2.2 图片检测2.3 视频检测2.4 自动标注2.5 保存标注结果3 参考附录1 YOLOv8 YOLOv8是一种前沿的计算机视觉技术,它基于先前YOLO版…

数据库管理-第267期 23ai:Oracle Data Redaction演示(20241128)

数据库管理267期 2024-11-286 数据库管理-第267期 23ai&#xff1a;Oracle Data Redaction演示&#xff08;20241128&#xff09;1 示例表及数据2 创建编校策略2.1 名字全编校2.2 电话部分编校 3 DML演示3.1 场景13.2 场景2 总结 数据库管理-第267期 23ai&#xff1a;Oracle Da…

hue 4.11容器化部署,已结合Hive与Hadoop

配合《Hue 部署过程中的报错处理》食用更佳 官方配置说明页面&#xff1a; https://docs.gethue.com/administrator/configuration/connectors/ 官方配置hue.ini页面 https://github.com/cloudera/hue/blob/master/desktop/conf.dist/hue.ini docker部署 注意&#xff1a; …