DbContext 生命周期从用户登录后开始

DbContext lifetime beginning after user login

通常 DbContext 和 ConnectionString 在应用程序启动时设置。在我的 ASP.NET MVC 应用程序中,我有一个包含 UsersConnectionStrings 数据的数据库,根据哪个用户登录,我想使用他们的 ConnectionString 将它们连接到辅助 DbContext。

我尝试使用 DbContextScope but with the current implementation it doesn't seem to support this scenario. (I posted a related question for that here).

那么在 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。