MVC基于登录用户注入DataAccessLayer

本文关键字:用户 注入 DataAccessLayer 登录 于登录 MVC | 更新日期: 2023-09-27 18:30:04

我有一个应用程序,它可以在不同服务器上托管的不同数据库中插入/保存数据。UI可能不同,但最终保存的数据几乎相同。所以我想使用相同的DataAccessLayer,但想根据loggedin用户更改connectionString。依赖项可以在startup.cs中配置,但当时我可能不知道数据库用户想要使用它。

在登录页面上,我要求用户选择要使用的数据库,所以更改连接字符串的唯一方法是在登录页面之后。有什么建议吗?

MVC基于登录用户注入DataAccessLayer

 public class ConnectionRepository : IConnectionRepository
{
    private IDbConnection _cnn = null;
    public IDbConnection GetOpenConnection(string databaseName)
    {
        if (_cnn != null && _cnn.ConnectionString.ToLower().Contains(databaseName.ToLower()))
        {
            _cnn.Open();
            return _cnn;
        }
        var cnn = ConfigurationManager.ConnectionStrings["DefaultConnection"].ToString();
        //Now replace database name in connection string with whichever one supplied
        var cb = new SqlConnectionStringBuilder(cnn) { InitialCatalog = databaseName };
        // wrap the connection with a profiling connection that tracks timings 
        return new ProfiledDbConnection(new SqlConnection(cb.ConnectionString), MiniProfiler.Current);
    }
}

此代码根据提供的名称动态替换连接字符串的InitialCatalog(数据库名称)部分。当前名称在用户登录时存储在会话中。

希望这能有所帮助。