13

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. :(

Bob.at.Indigo.Health
  • 11,023
  • 13
  • 64
  • 111

1 Answers1

32

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();
    }
}
Bob.at.Indigo.Health
  • 11,023
  • 13
  • 64
  • 111
  • 1
    God finally! Thank you for mentioning the import, for some reason it wasn't suggested and I couldnt figure out why my code didnt compile. – Ozgar Jul 05 '17 at 13:10
  • you are what they call a "savior" .... i had everything right just not the right using statement, yet there was still a method call with the same name so no compile errors about the namespace – Moi Hawk Nov 15 '18 at 18:26