Ich habe eine Anwendung mit Entity Framework 6 erstellt, einige Methoden erstellt, um Extrahierungsdaten aus einer Datenbank einzufügen, und möchte sie jetzt sowohl für eine Produktions- als auch für eine Debugging-Umgebung testen .Zwei identische generierte Datenbanken mit Entity Framework 6
Um sicher zu gehen, dass alles funktioniert, wie ich es gerne hätte, sollte die Debugging-Datenbank alle Daten für meine Tests löschen, während meine Produktion ihre Daten behalten sollte.
Ich habe zwei Projekte: MyApp.Database
und MyApp.Database.Test
, und sie haben jeweils eine Verbindungszeichenfolge in ihrem app.config
-datei, das das Programm geladen wird, wie so:
public DatabaseContext() : base("name=MyDB")
{
System.Data.Entity.Database.SetInitializer<DatabaseContext>(new CreateDatabaseIfNotExists<DatabaseContext>());
}
und Anschluss-string, wo die database
Parameter auf MyProdDB
und MyTestDB
:
<connectionStrings>
<add name="MyDB" connectionString="Host=localhost;user id=myUser;password=myPassword;database=MyProdDB" providerName="Npgsql" />
</connectionStrings>
Wenn ich die Anwendung ausführen, und die Tests laufen, ich habe die richtige Verbindungszeichenfolge für jede Art erhalten der Datenbank. Aber ich erhalte einen Fehler, wenn ich meine Tests: 42P01: relation "dbo.Tags" does not exist
laufen lasse. Eine einfache Nachricht, die besagt, dass ich meine Daten nicht in meine Testdatenbank migriert habe.
Aber wie migriere ich es in die Testdatenbank?
Ich habe versucht, den Test-Projekt in der Package manager Console
, und die folgenden Befehle auswählen:
PM> Add-Migration "Init"
No migrations configuration type was found in the assembly 'MyApp.Database.Test'. (In Visual Studio you can use the Enable-Migrations command from Package Manager Console to add a migrations configuration).
PM> Update-Database
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
No migrations configuration type was found in the assembly 'MyApp.Database.Test'. (In Visual Studio you can use the Enable-Migrations command from Package Manager Console to add a migrations configuration).
PM> Enable-Migrations
No context type was found in the assembly 'MyApp.Database.Test'.
Muss ich meine eigene DbContext
Klasse für MyApp.Database.Test
angeben, welche fast eine Replik MyApp.Database
ist?
Ich bin verwirrt, ob Sie versuchen, Unit-Tests oder zwei verschiedene Umgebungen zu konfigurieren - ART und DEV. IAC, wahrscheinlich möchten Sie nur Ihren Kontext in einem einzigen Projekt, in dem Migrationen leben werden. Um PROD zu aktualisieren, können Sie entweder Ihre Verbindungszeichenfolge (im Kontextprojekt) auf PROD verweisen und die Migrationen ausführen, oder Sie können ein Skript generieren, um die andere Datenbank "update-database -Script" zu aktualisieren. –
Ich brauche Integrationstests für dieselbe Umgebung. Ich will keine Daten in PROD verlieren - nur in DEV. Mein PROD ist auf dem neuesten Stand und funktioniert wie es sollte. Wenn ich versuche, '' Update-Database -Script'' zu starten, heißt das, dass keine expliziten Migrationen vorliegen. Kann ich darum bitten, jede Migration von 0 zu übernehmen? –
Stellt sich heraus, kann ich: '' Update-Datenbank -Script - SourceMigration: 0''. Lass uns sehen, wo das mich hinführt ... –