Утилита Entity Framework с асинхронными контроллерами в Web API / MVC
У меня есть этот маленький пример кода:
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, когда используется асинхронность? Получается, что нельзя полагаться на метод Dispose в контроллере?