【发布时间】:2013-03-07 20:02:02
【问题描述】:
我想在支付保存对 DbContext 更改的成本之前将响应返回给客户端。我可以在返回响应后保存更改吗?由于上下文已被释放,因此只需将其放入 ThreadPool.QueueUserWorkItem 就会失败。
谢谢!
【问题讨论】:
标签: c# asp.net-mvc entity-framework asp.net-web-api
我想在支付保存对 DbContext 更改的成本之前将响应返回给客户端。我可以在返回响应后保存更改吗?由于上下文已被释放,因此只需将其放入 ThreadPool.QueueUserWorkItem 就会失败。
谢谢!
【问题讨论】:
标签: c# asp.net-mvc entity-framework asp.net-web-api
在这种情况下,您处理 DbContext 的逻辑过于复杂,无法使用 using 块;您需要手动处理。您的代码可能看起来更像:
DbContext context = null;
try
{
context = new DbContext();
var query = context.GetStuff();
ThreadPool.QueueUserWorkItem(_ =>
{
try
{
context.SaveChanges();
}
finally
{
context.Dispose();
}
});
}
catch
{
//dispose of the context only if there was an exception, as it
//meant we weren't able to get into the async task and dispose of it there
if (context != null)
context.Dispose();
throw;
}
【讨论】: