我有一个应用程序,它将数据插入/保存在不同服务器上托管的不同数据库中。 UI可能不同,但最后保存的数据几乎相同。 所以我想使用相同的DataAccessLayer,但想要根据登录用户更改connectionString。 可以在startup.cs中配置依赖关系,但那时我可能不知道DataBase用户想要使用它。
登录页面上的我要求用户选择要使用的数据库,因此只有在登录页面后才能更改连接字符串。 有什么建议吗?
答案 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(数据库名称)部分。用户登录时,当前名称将存储在会话中。
希望这有帮助。