与 Dapper 的多个数据库连接

问题描述 投票:0回答:1

我的项目中有一个情况需要使用 Dapper 的多个数据库连接。

我创建了一个带有构造函数的抽象类来传递连接 这是例子

public abstract class BaseRepository 
{

private readonly IDbConnection _dbConnection;
public BaseRepository(IDbConnection dbConnection)
{
    
    _dbConnection = dbConnection;
}

    public async Task<int> ExecuteAsync(string sql, object? param = null, 
                   IDbTransaction? 
                   transaction = null, int? commandTimeout = null, CommandType? 
                   commandType = null)
  {

    try
    {
        return await _dbConnection.ExecuteAsync(sql, param, transaction, 
             commandTimeout, commandType)
                                           .ConfigureAwait(false);
    }
    catch (Exception ex)
    {
        // Log the exception, rethrow it, or handle it in some other way
        throw new Exception("An error occurred while retrieving the company.", ex);
    }

   }
  }

并像这样在其他类中继承

public class PRepository:BaseRepository
 {

public PRepository([FromKeyedServices(DbConnectionKeys.PCMRead)] IDbConnection 
  _connectionP, 
   ) : base(_connectionP)
{ 
}

   }

我只是想知道这是正确的方法吗?还是任何其他方法可以在没有抽象的情况下实现相同的目的。

提前致谢

c# .net .net-core asp.net-web-api dapper
1个回答
0
投票

看看这是否有帮助。我在我的 WebAPI 项目中创建了一个名为

DapperContext.cs
的文件。就我而言,即使我也必须访问多个数据库。这是我在里面所做的
DapperContext.cs

public class DapperContext
{
    private readonly string _databaseConnectionString1; 
    private readonly string _databaseConnectionString2;

    public DapperContext(string databaseConnectionString1,string databaseConnectionString2)
    {
        _databaseConnectionString1= databaseConnectionString1;
        _databaseConnectionString2= databaseConnectionString2;
    }

    public IDbConnection CreateConnection() => new SqlConnection(_databaseConnectionString1);
    public IDbConnection CreateLogConnection() => new SqlConnection(_databaseConnectionString2);

}

然后在

Program.cs
内部,读取
appsettings.json
中的连接字符串:

var db1string = builder.Configuration.GetConnectionString("db1string");
var db2string = builder.Configuration.GetConnectionString("db2string");

最后在您的代码中,根据您的情况,您可以像这样处理它:

using (var connection = _context.CreateConnection()) // Or _context.CreateLogConnection
{

}
© www.soinside.com 2019 - 2024. All rights reserved.