当前位置: 首页 > news >正文

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.lryc.cn/news/496876.html

相关文章:

  • Java面试八股文(精选、纯手打)
  • 工程设计行业内外网文件交换解决方案:FileLink助力高效、安全的跨网协作
  • Qt 2D绘图之三:绘制文字、路径、图像、复合模式
  • 配置宝塔php curl 支持http/2 发送苹果apns消息推送
  • Redis服务配置文件 redis.conf 更新修改配置参数说明
  • Android 俩个主题的不同之处 “Theme.AppCompat vs android:Theme.Material.Light.NoActionBar”
  • Redis+Caffeine 多级缓存数据一致性解决方案
  • vscode ctrl+/注释不了css
  • 《山海经》:北山
  • oracle中删除指定前缀的表
  • 解决 Flutter Dio合并请求多个接口,如果一个接口500,那么导致其他请求不在执行
  • The selected directory is not a valid home for Go SDK
  • 基于云模型的车辆行驶速度估计算法matlab仿真
  • MySQL有哪些日志?
  • Axios:现代JavaScript HTTP客户端
  • python学opencv|读取视频(一)灰度视频制作和保存
  • 【Rust WebAssembly 入门实操遇到的问题】
  • 掌握CMake中的变量:设置、使用及实际应用示例详解
  • React基础知识三 router路由全指南
  • [VUE]框架网页开发02-如何打包Vue.js框架网页并在服务器中通过Tomcat启动
  • k8s Quality of Service
  • 顶刊算法 | 鱼鹰算法OOA-BiTCN-BiGRU-Attention多输入单输出回归预测(Maltab)
  • 什么语言适合做 Serverless 开发?
  • 使用OpenCV和卡尔曼滤波器进行实时活体检测
  • 【25春招前端八股文】——JS数据类型检测方式
  • Kafka的学习路径规划
  • linux模拟试题
  • Qt-界面优化QSS
  • QT实战-qt各种菜单样式实现
  • 深度学习基础03_BP算法(下)过拟合和欠拟合