MVC根据登录用户注入DataAccessLayer

时间:2016-01-12 08:36:53

标签: c# asp.net-mvc

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

登录页面上的

我要求用户选择要使用的数据库,因此只有在登录页面后才能更改连接字符串。 有什么建议吗?

1 个答案:

答案 0 :(得分:0)

 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(数据库名称)部分。用户登录时,当前名称将存储在会话中。

希望这有帮助。