Wir versuchen herauszufinden, wann genau ein Entity Framework Database Initializer ausgeführt wird.
MSDN sagt, dass die Initialisierung das "erste Mal" passiert, dass wir auf die Datenbank zugreifen. Wann ist "das erste Mal"?
MSDN widerspricht sich selbst und besagt, dass die Initialisierung das erste Mal ausgeführt wird, wenn eine Instanz von DbContext
verwendet wird, aber auch das erste Mal, dass ein Typ von DbContext
ist benutzt. Welches ist es?
Außerdem definiert MSDN nicht "erstes Mal"? Ist dies das erste Mal seit Veröffentlichung? erstmals seit Application_Start? erstes Mal für eine gegebene Anfrage, für eine gegebene Methode? Was passiert, wenn wir die Anwendung neu starten, indem wir die Datei web.config ändern?
Hier sind einige Zitate aus MSDN, die sagen, dass der Datenbankinitialisierer läuft ...
wenn eine Instanz einer DBContext abgeleiteten Klasse das erste Mal verwendet wird
, wenn der angegebene DbContext-Typ für den ersten Zugriff auf eine Datenbank verwendet wird
Zum Beispiel haben wir eine Controller-Aktion, in der wir ein DbContext
instanziieren und eine Einfügeoperation ausführen. Wenn wir diese Aktion zweimal (oder 10.000 Mal) aufrufen, wird der DbInitializer
so oft ausgeführt? Wenn wir den DropDatabaseCreateAlways
Initialisierer verwenden und wir diese Aktion zweimal aufrufen, wird der Db zwei Event
Zeilen haben, oder wird der Initialisierer den Db zwischen den Einfügungen löschen und dabei eine Event
Zeile übriglassen?
Entity Framework initialisiert die Datenbank einmal pro AppDomain-Startup.
Wenn die Klasse DbContext
zuerst von Ihrem Code instanziiert wird und auf eine ihrer Eigenschaften zugegriffen wird, verwendet sie eine InternalContext
-Instanz, die die Initialisierungslogik behandelt, und stellt sicher, dass diese Initialisierung nur einmal unter Verwendung einer statischen Klasse ausgeführt wird Feld.
Wenn Sie die Datei web.config ändern oder wenn der Anwendungspool wiederverwendet wird oder der iis-Prozess selbst neu gestartet wird, wird Ihre Anwendungsdomäne erneut gestartet und der Initialisierer wird ausgelöst. Dieser Beitrag sollte Ihnen dabei helfen zu wissen, wann dies in Webanwendungen passiert.
Wenn Sie dieselbe Kontextinstanz mehrmals verwenden oder sogar bei jeder Anforderung einen neuen Kontext erstellen, wird die Initialisierung nicht jedes Mal ausgelöst.
Tags und Links .net c# entity-framework asp.net entity-framework-6