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?
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:
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: Ссылка
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:
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.
Tags und Links asp.net-mvc entity-framework