我对哪种方式更好,使用哪种方式有点困惑。当然,如果您始终可以获取 httpcontext.getOwinContext()。get();那么,为什么还要创建一个新的 applicationdbcontext 并风险加倍对象等。?
注意:我在这里专门谈论Web应用程序。
您创建并可以在MVC应用程序中使用HttpContext.GetOwinContext().Get<ApplicationDbContext>();
检索的DBContext实例可以专门用于使用身份框架。
如果您需要DBContext的实例才能在应用程序中进行一般使用,则可以使用IOC容器(依赖项注入)在需要时为您提供新的实例,并在需要时在请求范围内提供。
您不应该需要来检索dbContext的身份框架实例以在您的应用程序中使用,它将独立于您的应用程序管理,您可以管理自己的生命周期。
因为您将它们连接到OWIN启动类中以使用DBContext的实例,所以他们将在hood下使用它,并在需要时创建和破坏实例。
解决方案是根据请求存储一个UserManager和DBContext的单个实例,并在整个应用程序中重复使用它们。由于身份通过cookie中间件进入OWIN管道,我们可以将UserManager和dbContext存储在OWIN上下文对象中,并根据需要检索
也在应用程序中,如果我们需要直接与DBContext对象一起使用,我们可以使用" GET"方法从OWIN上下文中获取类的实例
var dbContext = context.Get<ApplicationDbContext>();
来自https://blogs.msdn.microsoft.com/webdev/2014/02/02/per-request-lifetime-management-management-for-usermanager-class-class-class-in-asp-net-intentity/