2015-09-30 3 views
2

Мне нужно изменить время работы dbContext для Request.GetOwinContext(), чтобы использовать конкретный connectionString, но он не работает.change OwinContext dbContext во время выполнения

У меня есть dbContexclass принять по умолчанию connectionString от Web.Config или указанный один такой:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser> 
{ 
    public ApplicationDbContext() 
     : base("AuthEntities", throwIfV1Schema: false) 
    { 
     Configuration.ProxyCreationEnabled = false; 
     Configuration.LazyLoadingEnabled = false; 
    } 

    public ApplicationDbContext(string sConnectionString) 
     : base(sConnectionString, throwIfV1Schema: false) 
    { 
     Configuration.ProxyCreationEnabled = false; 
     Configuration.LazyLoadingEnabled = false; 
    } 

    public static ApplicationDbContext Create() 
    { 
     return new ApplicationDbContext(); 
    } 

    public static ApplicationDbContext Create(string sConnectionString) 
    { 
     ApplicationDbContext test = new ApplicationDbContext(sConnectionString); 
     return test; 
    } 

} 

тогда, когда новый пользователь регистрируется я пытался изменить в Owin по умолчанию DbContext для одного с новым ConnectionString, как это:

[AllowAnonymous] 
[Route("create")] 
public async Task<IHttpActionResult> CreateUser(CreateUserBindingModel createUserModel) 
{ 
    (...) 

    //get the specific connectionString 
    var connectionString = cService.GetCompanyConnectionString(createUserModel.Company); 

    //generate new dbContext 
    var appDbContext = ApplicationDbContext.Create(connectionString); 

    //get OwinContext 
    var context = HttpContext.Current.GetOwinContext(); 

    //replace the DbContext inside OwinContext 
    context.Set<ApplicationDbContext>("ApplicationDbContext", appDbContext); 

    (...) 
} 

до и включая appDbContext все работает, как ожидалось, но на отладки, после установки context.Set<ApplicationDbContext>...context по-прежнему использует значение по умолчанию.

Я также пробовал использовать var context = Request.GetOwinContext(); и устанавливал непосредственно как HttpContext.Current.GetOwinContext().Set<ApplicationDbContext>("ApplicationDbContext", appDbContext); и Request.GetOwinContext().Set<ApplicationDbContext>("ApplicationDbContext", appDbContext);, но всегда получаю тот же результат.

ответ

1

проблема здесь была первая строка я пытался использовать при настройке, так что эта линия

context.Set<ApplicationDbContext>("ApplicationDbContext", appDbContext); 

должен быть изменен на

context.Set<ApplicationDbContext>(appDbContext); 
+0

Я считаю, что это происходит потому, что '' .С является Слабо типизированный метод? –

+0

Привет, я сделал то же самое, но usermanager все еще использует старый dbcontext..can u help here: https://stackoverflow.com/questions/45315809/how-to-change-database-name-in-dbcontext-connection- строка-в-выполнения – Samra

Смежные вопросы