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

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

csharp 复制代码
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注册实例服务。大致实现代码如下:

csharp 复制代码
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;        
    }
}

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

参考文献:

1https://www.donet5.com/Home/Doc

相关推荐
gudufy3 天前
EasyAdminBlazor 生产部署完整指南:IIS、Windows 服务与宝塔
iis·asp.net core·在线升级·windows服务·easyadminblazor·blazor部署·宝塔部署
金士顿20 天前
ASP.NET Core Native AOT + systemd 实战:把 Linux ARM64 程序变成可靠的设备服务
linux·嵌入式·asp.net core·arm64
金士顿21 天前
System.Text.Json Source Generator 深度解析:为什么 Native AOT 不喜欢反射
linux·asp.net core·arm64·net·native aot
金士顿21 天前
ASP.NET Core Native AOT 到底是什么?从 C#、IL、JIT 一直讲到 Linux ARM64 ELF
嵌入式·asp.net core
金士顿24 天前
ASP.NET Core BackgroundService 深度解析:设备后台任务到底应该怎么设计
linux·嵌入式·asp.net core·arm64
ChaITSimpleLove4 个月前
深入解析 ASP.NET Core Options 模式:IOptions、IOptionsSnapshot 与 IOptionsMonitor 实战指南
asp.net core·snapshot·依赖注入di·options模式·ioptions·ioptionsmonitor·配置热更新
医疗信息化王工4 个月前
医院自律端系统——预警处置模块全栈实战(ASP.NET Core + Vue3 + Quartz 定时调度)
mysql·postgresql·vue·asp.net core·quartz
滴滴答答哒5 个月前
.NET Core 基于 AOP + Polly 实现数据库死锁自动重试
数据库·.netcore·sqlsugar
Esofar5 个月前
Dddify:给 ASP.NET Core 项目一套轻量、清晰、可落地的 DDD 基础设施
c#·ddd·asp.net core·cqrs·dddify·clean architecture
CSharp精选营5 个月前
.NET 8 Web开发入门(三):解构引擎——依赖注入(DI)与中间件管道
中间件·asp.net core·依赖注入·ioc容器·请求管道·服务生命周期