New ApplicationDbContext()vs HttpContext.GetOwinContext()。Get <applicationdbcontext>();

时间:2015-05-11 08:37:14

标签: c# asp.net asp.net-mvc entity-framework asp.net-identity

我对哪种方式更好以及使用哪种方式感到有点困惑。当然,如果你总能得到 HttpContext.GetOwinContext()。Get();那为什么甚至会创建一个新的 ApplicationDbContext 并冒险加倍对象等?

注意:我在这里专门谈论Web应用程序。

2 个答案:

答案 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>();

来自https://blogs.msdn.microsoft.com/webdev/2014/02/12/per-request-lifetime-management-for-usermanager-class-in-asp-net-identity/