2017-01-08 4 views
0

Ich behandle unbehandelte Ausnahmen mit einem globalen Ausnahmebehandler. Wenn während der Verarbeitung der Anforderung eine nicht behandelte Ausnahme auftritt, wird die Dispose-Methode des Controllers aufgerufen? (Sowohl in MVC und Web-API?)Controller und Dbcontext Dispose

Zum Beispiel, Ich versuche, das gleiche EF DbContext im gesamten Anfrage zu verwenden. Ist es sicher, diese Basisklasse zu verwenden:

public abstract class BaseController : Controller 
{ 
    public BaseController() 
    { 
     Database = new DatabaseContext(); 
    } 

    protected DatabaseContext Database { get; set; } 

    protected override void Dispose(bool disposing) 
    { 
     Database.Dispose(); 
     base.Dispose(disposing); 
    } 

}

+0

Wenn Sie komplexe Lebenszyklen haben und einfädeln müssen eine 'DbContext' sollten Sie überprüfen https://github.com/mehdime/DbContextScope seine extrem leistungsfähig und ziemlich leicht, aber komplex, so dass Sie einen Anwendungsfall benötigen. Das heißt, nur den Hintergrund zu lesen, der zur Entwicklung der lib führte, ist aufschlussreich zu diesem Thema. –

Antwort

0

späte Antwort, aber .. Ich bin unsicher, ob oder nicht entsorgen ist garantiert in allen Grenzfälle laufen. Aber es sollte einfach für Sie sein, Ihr Szenario zu testen.

Damit scheint, dass es nicht wirklich kritisch ist, Ihren dbcontext überhaupt zu entsorgen. AAs Prinzip sollte es als gute Praxis getan werden. Aber, wie in Jon Gallants Blogpost here gezeigt, ist es nicht notwendig, nach MS-Devs. Daher wird es höchstwahrscheinlich keine Rolle spielen, wenn Ihr dbcontext in seltenen Fällen nicht entsorgt wurde.

Anders als das ich glaube, es sollte für Sie, so lange sicher sein, wie Sie die Grenzen Ihres Kontext respektieren. I.E führt keine parallelen Operationen auf verschiedenen Threads in der Anforderung aus, die beispielsweise diese Kontextinstanz verwenden.