.NET Identity Web Api正确重用DbContext

时间:2014-12-23 09:38:10

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

我希望每个请求都有一个数据库连接。我试图通过重用我的身份ApplicationDbContext来实现这一目标。我已在此DbSet中为我的应用程序实体定义了ApplicationDbContext。所以这应该是我整个应用程序所需的唯一上下文。

我的ConfigureAuth方法配置为每ApplicationDbContext创建一个OwinContext

Startup.cs

public void ConfigureAuth(IAppBuilder app)
{
   // db context and user manager use a single instance per request
   app.CreatePerOwinContext(ApplicationDbContext.Create);
   app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
   ....
}

在我的API控制器中,我使用OwinContext来检索上下文。

SomeController

private ApplicationDbContext _db;
public ApplicationDbContext DB
{
   get
   {
       if (_db == null)
       {
           _db = Request.GetOwinContext().Get<ApplicationDbContext>();
           _db.Configuration.ProxyCreationEnabled = false;
       }
       return _db;
   }
   private set
   {
       _db = value;
   }
}

到目前为止一切顺利。为了监控此行为,我在Dispose类中实现了ApplicationDbContext方法。

ApplicationDbContext.cs

protected override void Dispose(bool disposing)
{
   Debug.WriteLine("Disposing ApplicationDbContext");
   base.Dispose(disposing);
}

现在我从未见过那些处理消息的人。这是否意味着我有过时的数据库连接?您可能已经注意到我禁用了AutomaticProxy创建。这会影响生命周期吗?这是身份问题吗?

我自己推理我在控制器中不需要dispose方法来处理上下文,因为这是owin部分将为我做的。

0 个答案:

没有答案