Disposed DbContext in MVC Controller, welcher Weg "besser"?

8

In MVC 5 haben die Gerüstcodes etwas wie:

%Vor%

andernfalls muss ich

haben %Vor%

in jeder Aktion.

Die Codes sehen gut aus, daher muss ich nicht in jeder Aktion verwenden. Wird dies jedoch von Programmierern bevorzugt, oder hat ein solcher Stil einen Vorteil gegenüber der Verwendung in jeder Aktion, die dbcontext verwenden muss?

    
ZZZ 03.11.2014, 05:48
quelle

4 Antworten

6

Beide Lösungen sind gut - beide Lösungen werden den Db-Kontext bereitstellen. Aber meiner Meinung nach wird die zweite Option besser sein - Sie erstellen den db-Kontext genau dort, wo Sie müssen.

Aber was ist, wenn eine andere Klasse (eine Serviceklasse) auch den db-Kontext verwendet? Es empfiehlt sich, einen db-Kontext für die gesamte Webanforderung zu verwenden. In diesem Fall sollten Sie den zuvor erstellten db-Kontext an alle Klassen übergeben, die den db-Kontext verwenden, um das Erstellen eines neuen db-Kontexts in allen Klassen zu verhindern. Also werde ich die Verwendung von IoC-Containern in Betracht ziehen. IoC-Container löst Ihre Abhängigkeiten und verwaltet auch die Objektlebensdauer. Brüllen

Ich habe ein paar IoC-Container aufgelistet:

rraszewski 03.11.2014, 09:14
quelle
3

Für einfache Szenarien ist das Aufrufen von Dispose (oder Verwenden von) gar nicht nötig :) "Das Standardverhalten von DbContext ist, dass die zugrunde liegende Verbindung automatisch geöffnet wird, sobald sie benötigt wird, und geschlossen wird, wenn sie nicht mehr benötigt wird." Von hier: Ссылка

    
Konstantin Salavatov 31.03.2017 10:16
quelle
1

Eine Using-Anweisung ruft die Dispose () -Methode am Ende des Using-Blocks automatisch auf. Die Using-Anweisung ruft die Dispose () -Methode auf, selbst wenn im Code ein Fehler aufgetreten ist.

    
Webruster 03.11.2014 06:04
quelle
1

Was die Best Practices anbelangt, sollten Sie unbedingt die gerüstgestützten Vorlagen verwenden und sich nicht mit dem using(){} -Muster anlegen, es sei denn, Sie haben einen wirklich guten zwingenden Grund. Beide Lösungen bringen das gleiche Ergebnis, aber beide sind keine guten Lösungen. Der Grund, warum die Vorlage einen einzelnen DbContext hat, ist es, den Test zu erleichtern - ein Beispiel:

%Vor%

Der erste Konstruktor ohne Argumente ist derjenige, der in der Produktion verwendet wird und automatisch einen neuen db-Kontext basierend auf der App-Konfigurationsdatei erstellt. Die zweite Option ermöglicht es Ihnen, einen gespiegelten Db-Kontext zu injizieren, wenn Sie Komponententests durchführen.

Am Ende des Tages geht es bei dieser Frage und meiner Antwort nicht wirklich darum, db-Kontexte zu entsorgen - es geht darum, warum die Code-Template-Designer den Ansatz gewählt haben, den sie gemacht haben und warum sie Ihnen helfen werden. Sie sollten weitere Informationen zum Komponententest lesen.

    
Ben 22.01.2017 16:50
quelle

Tags und Links