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

时间:2015-06-17 17:26:45

标签: asp.net-mvc entity-framework entity-framework-6 asp.net-identity dbcontext

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

我尝试使用DbContextScope但是对于当前的实现,它似乎并不支持这种情况。 (我发布了here的相关问题。

因此,在ASP.NET MVC应用程序的生命周期中,我们如何确保仅在用户登录后才实例化辅助DbContext?在这里管理DbContext生命周期的正确方法是什么。

谢谢!

1 个答案:

答案 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。