cambiare OwinContext DbContext sul runtime

voti
2

Ho bisogno di run-time cambiare il dbContextper Request.GetOwinContext()usare una specifica connectionString, ma non sta funzionando.

Ho una dbContex classdi accettare un default connectionStringda Web.Configoa un determinato uno come questo:

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;
    }

}

poi, quando un nuovo utente si sta registrando Ho provato a cambiare l'Owin predefinita DbContext per uno con una nuova connectionString come questo:

[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);

     (...)
}

fino e compreso appDbContexttutto funziona come previsto, ma il debuging, dopo aver impostato context.Set<ApplicationDbContext>...la contextutilizza ancora quella di default.

Ho provato anche utilizzando var context = Request.GetOwinContext();e impostando direttamente come HttpContext.Current.GetOwinContext().Set<ApplicationDbContext>(ApplicationDbContext, appDbContext);e Request.GetOwinContext().Set<ApplicationDbContext>(ApplicationDbContext, appDbContext);ma ho sempre ottenere lo stesso risultato.

È pubblicato 30/09/2015 alle 10:06
fonte dall'utente
In altre lingue...                            


1 risposte

voti
1

il problema qui è stata la prima stringa che stavo cercando di utilizzare durante l'impostazione, in modo da questa linea

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

deve essere cambiato in

context.Set<ApplicationDbContext>(appDbContext);
Risposto il 30/09/2015 a 13:30
fonte dall'utente

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more