通常在应用程序启动时设置DbContext
和ConnectionString。在我的ASP.NET MVC应用程序中,我有一个包含用户和 ConnectionStrings 数据的数据库,根据用户登录的情况,我想使用他们的ConnectionString将它们连接到辅助数据库的DbContext。
我尝试使用DbContextScope但是对于当前的实现,它似乎并不支持这种情况。 (我发布了here的相关问题。
因此,在ASP.NET MVC应用程序的生命周期中,我们如何确保仅在用户登录后才实例化辅助DbContext?在这里管理DbContext生命周期的正确方法是什么。
谢谢!
答案 0 :(得分:1)
DbContext有一个重载,它接收连接字符串。有了这个,您可以添加一个构造函数,以根据访问数据的用户传递辅助连接字符串。
public MySecondaryDbContext(string connectionString)
: base(connectionString)
{
}
或者,您可以传入一个具有要使用的连接字符串的用户对象。
public MySecondaryDbContext(UserObject user)
: base(user.ConnectionString)
{
}
希望这可以帮助你。
生命周期更新
关于生命周期,你可以使用这样的东西和来自主叫方的空检查。
public static MySecondaryDbContext GetContextForUser(UserObject user)
{
if(user.IsLoggedIn)
return null;
return new MySecondaryDbContext(user.ConnectionString);
}
private MySecondaryDbContext(string connectionString)
: base(connectionString)
{
}
这将阻止在用户登录之前实例化辅助DbContext。