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.
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
:
In Powershell
könntest du so etwas ausprobieren:
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.
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:
set ASPNETCORE_ENVIRONMENT <Environment Name>
setx ASPNETCORE_ENVIRONMENT <Environment Name>
"Start" - & gt; "Bearbeiten der Systemumgebungsvariablen" - & gt; "Umgebungsvariablen" - & gt; "Neu"
export ASPNETCORE_ENVIRONMENT=<Environment Name>
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:
Auch wenn Sie komplexere Szenarios haben, sollten Sie jetzt einige kleine Batch- oder Shell-Skripte erstellen
Tags und Links c# entity-framework asp.net-core entity-framework-core