2017-07-27 4 views
0

ログイン画面でユーザーが入力したコードに基づいて、実行時に接続文字列を変更したいとします。私は、次のOwin ApplicationDbContextが更新されなかった

ApplicationDbContextに

public static ApplicationDbContext Create(string scCode){ 
     return new ApplicationDbContext("name=GEContext_" + scCode); 
    } 

を行なったし、それはまだ元のデータベースを参照している今

public async Task<ActionResult> Login(LoginViewModel model, string returnUrl) 
    { 
     if (ModelState.IsValid) 
     { 
      try 
      { 
       System.Web.HttpContext.Current.Session["SchoolCode"] = model.SchoolCode; 

       var appDbContext = ApplicationDbContext.Create(model.SchoolCode); 
       HttpContext.GetOwinContext().Set<ApplicationDbContext>(appDbContext); 
.... 
    } 
} 
} 

...私は何をしないのですが、以下のように、ログイン時に私は、ConnectionStringを変更します?

P.S.歴史/詳細についてthis post

答えて

0

こんにちはを考える私たちは、デフォルトのデータベースを変更しなければならなかったというのが私のシナリオでは、一方、デフォルトのデータベースを指定する必要があり、問題がApplicationDbContextにあったhere

から回答を得ました。 だから私はそれを使用して変更しました

var appDbContext = ApplicationDbContext.Create(System.Web.HttpContext.Current.Session["SchoolCode"].ToString());//new ApplicationDbContext("name=GEContext", System.Web.HttpContext.Current.Session["SchoolCode"].ToString()); 

HttpContext.GetOwinContext().Set<ApplicationDbContext>(appDbContext); 
HttpContext.GetOwinContext().Set<ApplicationUserManager>(new ApplicationUserManager(new UserStore<ApplicationUser, Role, int, UserLogin, UserRole, UserClaim>(appDbContext))); 

return HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>(); 
関連する問題