Wiederholtes Erstellen und Löschen von Datenbanken in Entity Framework

9

Beim Schreiben einiger Komponententests für unsere Anwendung stieß ich auf ein merkwürdiges Verhalten in EF6 (getestet mit 6.1 und 6.1.2): Offensichtlich ist es nicht möglich, Datenbanken (gleicher Name / gleiche Verbindungszeichenfolge) innerhalb der gleicher Anwendungskontext.

Testeinrichtung:

%Vor%

RepeatedCreateDeleteDifferentName wird erfolgreich abgeschlossen, die anderen beiden Fehler schlagen fehl. Dementsprechend können Sie keine Datenbank mit demselben Namen erstellen, die bereits einmal verwendet wurde. Wenn Sie versuchen, die Datenbank zum zweiten Mal zu erstellen, löst der Test (und die Anwendung) eine SqlException aus und notiert eine fehlgeschlagene Anmeldung. Ist das ein Fehler in Entity Framework oder ist dieses Verhalten beabsichtigt (mit welcher Erklärung)?

Ich habe das auf einem Ms SqlServer 2012 und Express 2014 getestet, noch nicht auf Oracle. Übrigens: EF scheint ein Problem zu haben, da CompatibleWithModel der allererste Aufruf der Datenbank ist.

Aktualisierung: Ein Problem beim EF-Fehler-Tracker ( Link ) wurde gemeldet.

    
hoekki 29.01.2015, 12:31
quelle

2 Antworten

3

Datenbankinitialisierungen werden nur einmal pro Kontext pro Anwendungsdomäne ausgeführt. Wenn Sie die Datenbank an einem beliebigen Punkt löschen, werden sie die Datenbank nicht automatisch erneut ausführen und neu erstellen. Sie können DbContext.Database.Initialize(force: true) verwenden, um zu erzwingen, dass der Initialisierer erneut ausgeführt wird.

    
Rowan Miller 10.02.2015, 23:42
quelle
1

Vor ein paar Tagen habe ich Integrationstests geschrieben, die den DB-Zugriff über EF6 beinhalteten. Dazu musste ich eine LocalDB-Datenbank für jeden Testfall erstellen und löschen, und das funktionierte für mich.

Ich habe nicht die EF6-Datenbankinitialisierungsfunktion verwendet, sondern stattdessen ein DROP / CREATE DATABASE-Skript mit Hilfe von diesen Beitrag - Ich habe das Beispiel hier kopiert:

%Vor%

Der folgende Code war für das Erstellen von Datenbankobjekten gemäß dem Modell verantwortlich:

%Vor%

Der Datenbankname musste zwischen den Tests nicht geändert werden.

    
felix-b 10.02.2015 12:38
quelle