Wann genau ist das "erste Mal" ein DbContext greift auf die Datenbank zu?

8

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?

%Vor%     
Shaun Luttin 22.10.2014, 15:10
quelle

1 Antwort

6

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.

    
julealgon 22.10.2014, 16:52
quelle