【发布时间】:2016-06-29 12:34:27
【问题描述】:
我有这个小代码示例:
public class ValueController : ApiController
{
private EstateContext _db;
public ValueController()
{
_db = new EstateContext();
}
[HttpPost]
public async void DoStuff(string id)
{
var entity = await _db.Estates.FindAsync(id); //now our method goes out and Dispose method is calling
//returns here after disposing
_db.SaveChanges(); // _db is disposed
}
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
_db.Dispose();
}
}
每个 ApiController/Controller 都实现了 IDisposable 接口。因此,在 Dispose 方法中,我想释放任何资源,例如 DbContext。但是如果使用异步,这个 Dispose 方法会在第一次出现 await 时调用。所以在等待之后我已经处理了 DbContext 。 那么在使用异步时处理 EF 上下文的最佳方法是什么?原来在controller中不能依赖Dispose方法?
【问题讨论】:
-
async void?这似乎是个坏主意…… -
@David 你为我节省了很多时间))谢谢
标签: c# asp.net asp.net-mvc entity-framework asp.net-web-api