Migrationen in Entity Framework Core 2.0 - So legen Sie die Umgebung fest oder übergeben Argumente

8

Ich spiele mit EF Core 2.0 und habe 3 env in meiner App: dev, staging und prod. Jetzt möchte ich das Datenbankschema auf eine bestimmte Datenbank anwenden. Ich hatte jedoch ein Problem. Wenn ich zum Beispiel " dotnet ef database drop (update) " ausführe, versuche ich standardmäßig "production env" zu erhalten.

Wie kann ich angeben, welche Umgebung verwendet werden soll? Meine DbContextFactory sieht so aus:

%Vor%

es war so etwas wie: dotnet ef database drop -e development in der Version 1.1 , aber dies wurde aus der Version 2.0 entfernt.

set ASPNETCORE_ENVIRONMENT=development dotnet ef database drop

scheint auch nicht zu funktionieren.

    
silent_coder 08.06.2017, 17:42
quelle

2 Antworten

1

Nun, um ehrlich zu sein, ich kenne keine genaue Antwort auf diese Frage. Ich denke, Umgebungsvariablen sollten funktionieren, aber die Art und Weise, wie Sie sie setzen, hängt ziemlich von der Umgebung ab, für die Sie arbeiten. Es wird also eine Geschichte unter Linux geben, anders unter Windows (wieder anders bei PowerShell) und etwas unter MacOS.

Das funktioniert für mich in Linux und in der Bash-Konsole in Windows :

%Vor%

In Powershell könntest du so etwas ausprobieren:

%Vor%

Aber selbst wenn es sich um eine Migration handelt, ist es immer noch eine Konsolen-App. Sie könnten also den Benutzer bitten, die Umgebung von der Konsole aus mit etwas wie:

zu betreten %Vor%

Das ist natürlich keine perfekte Lösung, aber wenn Sie keine Optionen haben, könnte dies ein Workaround sein. Du könntest auch andere Param übergeben.

    
Ph0en1x 09.06.2017 20:09
quelle
1

Was ich hier hier gesammelt habe, ist, dass -e MyCustomEnvironment nicht ist verfügbar in den EF Core Design Tools für Core 2.x


Um Umgebungsvariablen festzulegen, habe ich festgestellt, dass Sie je nach Anwendungsfall die folgenden Möglichkeiten haben:

Umgebungsvariable für diese CMD Sitzung (Windows):

set ASPNETCORE_ENVIRONMENT <Environment Name>

Umgebungsvariable in Ihrer Benutzerumgebung (Windows):

setx ASPNETCORE_ENVIRONMENT <Environment Name>

Auch möglich über GUI (Windows)

"Start" - & gt; "Bearbeiten der Systemumgebungsvariablen" - & gt; "Umgebungsvariablen" - & gt; "Neu"

Umgebungsvariable für diese Shell-Sitzung (Linux):

export ASPNETCORE_ENVIRONMENT=<Environment Name>

Umgebungsvariable in Ihrer Benutzerumgebung (Linux):

cd ~ echo 'export ASPNETCORE_ENVIRONMENT=<Environment Name>' >> .bashrc Dadurch wird die Variable jedes Mal exportiert, wenn .bashrc ausgeführt wird. Ich bin mir nicht sicher, ob das der richtige Weg für Linux ist, aber es hat für mich funktioniert.


Auch in meinem Fall wollte ich nicht, dass der StartUp-Code ausgeführt wird, da ich das Gefühl habe, für eine DesignTime-Aktion nicht alle Services meiner Anwendung registrieren zu müssen. Dies könnte so gemacht werden:

%Vor%


Auch wenn Sie komplexere Szenarios haben, sollten Sie jetzt einige kleine Batch- oder Shell-Skripte erstellen

    
D4rth B4n3 06.09.2017 07:51
quelle