我对哪种方式更好以及使用哪种方式感到有点困惑。当然,如果你总能得到 HttpContext.GetOwinContext()。Get();那为什么甚至会创建一个新的 ApplicationDbContext 并冒险加倍对象等?
注意:我在这里专门谈论Web应用程序。
答案 0 :(得分:3)
您创建并可以使用MVC应用程序中的HttpContext.GetOwinContext().Get<ApplicationDbContext>();
检索的DbContext实例可以专门用于使用Identity Framework。
如果您需要在应用程序中使用DbContext的一般实例,则可以使用IoC容器(依赖注入)在需要时以及在请求范围内(如果需要)为您提供新的实例。
您不应该需要来检索DbContext的标识框架实例以供在您的应用程序中使用,它将独立于您的应用程序进行管理,您可以管理自己的生命周期。
因为你在Owin Startup类中将它们连接起来使用你的DbContext的一个实例,所以它们将在底层使用它,并在需要时创建和销毁实例。
答案 1 :(得分:1)
解决方案是为每个请求存储一个UserManager和DbContext实例,并在整个应用程序中重用它们。由于Identity通过cookie中间件挂钩到OWIN管道,我们可以将UserManager和DbContext存储在OWIN上下文对象中并根据需要检索它们
同样在应用程序中,如果我们需要直接使用DbContext对象,我们可以使用'Get'方法从前面提到的OWIN上下文中获取类的实例
var dbContext = context.Get<ApplicationDbContext>();