我有这个小代码示例:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
每个ApiController/Controller都实现了IDisposable接口.所以在Dispose方法中我想释放任何资源,比如DbContext.但是如果使用async,则此Dispose方法在第一次出现await时调用.所以在等待之后我已经处理了DbContext.那么在使用异步时处理EF上下文的最佳方法是什么?事实证明,在控制器中不可能依赖Dispose方法?