通常DbContext
和ConnectionString在应用程序启动时设置。在我的 ASP.NET MVC应用程序中,我有一个包含用户和ConnectionString数据的数据库,根据登录的用户,我想使用他们的ConnectionString将它们连接到辅助DbContext。
我尝试使用 DbContextScope,但在当前的实现中,它似乎不支持这种情况。(我在这里发布了一个相关问题)。
因此,在 ASP.NET MVC 应用程序的生命周期中,我们如何确保仅在用户登录后实例化辅助 DbContext?在这里,管理 DbContext 生命周期的正确方法是什么?
谢谢!
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。