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;        
    }
}

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

参考文献:

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

相关推荐
冷冷的菜哥1 天前
ASP.NET Core文件分片上传
c#·asp.net·asp.net core·文件分片上传
冷冷的菜哥5 天前
ASP.NET Core上传文件到minio
后端·asp.net·上传·asp.net core·minio
ArabySide5 天前
【ASP.NET Core】双Token机制在ASP.NET Core中的实现
后端·asp.net core
伍华聪6 天前
在代码生成工具Database2Sharp中对Vue3+ElementPlus的BS端和Winform端界面进行定制生成
sqlsugar·代码生成工具
百锦再8 天前
SQLSugar 封装原理详解:从架构到核心模块的底层实现
sql·mysql·sqlserver·架构·core·sqlsugar·net
伍华聪11 天前
使用HBuilderX把Vue3+Vant4的H5端应用打包为安卓App应用程序
sqlsugar·vue3+typescript
余衫马12 天前
Mysql 5.7 与 SqlSugar 5.X 整合开发实战
mysql·c#·orm·sqlsugar
伍华聪17 天前
在Vant4+Vue3+TypeScript的H5移动前端使用UnoCSS
sqlsugar·vue3+typescript
伍华聪18 天前
在Vue3+ElementPlus前端中,使用watch监控对象变化,实现字典列表的级联更新处理
sqlsugar·vue3+typescript
ArabySide1 个月前
【ASP.NET Core】探讨注入EF Core的DbContext在HTTP请求中的生命周期
后端·http·asp.net·asp.net core·efcore