Search code examples
asp.netasp.net-identityowinasp.net-identity-2

How to get ApplicationDbContext out of the Owin pipeline


This has to be simple, but I'm going bug-eyed trying to find the answer. How does a controller action get a reference to the per-request ApplicationDbContext that was stashed in the Owin pipeline?

EDIT: Ok, I think I'm getting closer... or maybe not... All of my Googling seems to lead to this blog post, which sez to use:

var dbContext = context.Get<ApplicationDbContext>();

where context is apparently an instance of Microsoft.Owin.IOwinContext. So I tried:

var db = HttpContext.GetOwinContext().Get<ApplicationDbContext>();

But the Get<T> method requires a string key parameter. :(


Solution

  • And the answer (apparently) is... You need to add this using statement to get it to work:

    using Microsoft.AspNet.Identity.Owin;
    

    so a complete example would look like:

    using Microsoft.AspNet.Identity.Owin;
    
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            var context = HttpContext.GetOwinContext().Get<ApplicationDbContext>();
            DoSomething(context); // Use the context object; do not dispose it!
    
            return View();
        }
    }