Entity Framework mit asynchronen Controllern in Web API / MVC
Ich habe dieses kleine Codebeispiel:
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();
}
}
Jeder ApiController / Controller implementiert eine IDisposable-Schnittstelle. In der Dispose-Methode möchte ich also Ressourcen wie DbContext freigeben. Wenn jedoch Async verwendet wird, ruft diese Dispose-Methode beim ersten Auftreten von wait auf. Also nachdem ich gewartet habe habe ich DbContext schon entsorgt. Wie lassen sich EF-Kontexte am besten entsorgen, wenn Async verwendet wird? Es stellt sich heraus, dass es nicht möglich ist, sich auf die Dispose-Methode in der Steuerung zu verlasse