So wenden Sie vorhandene Migrationen für ApplicationDbContext in Release-Erstellung der ASP.NET Core-Webanwendung mithilfe von SQLite an

asp.net-core dotnet-cli ef-migrations entity-framework-core sqlite

Frage

Ich kann keine vorhandenen Migrationen für ApplicationDbContext auf das Release-Build meiner ASP.NET Core-Webanwendung mithilfe der SQLite-Datenbank anwenden. Daher muss ich meine sqlite-.db-Datei von Debug build (die ich in der Lage bin, Migrationen anzuwenden) in den Release-Build kopieren, damit ich sie auf meinem Ubuntu-Server bereitstellen kann. Entweder das, oder ich muss app.UseDatabaseErrorPage(); aufrufen app.UseDatabaseErrorPage(); in der public void Configure() -Methode in Startup.cs für die Produktionsumgebung, die nicht empfohlen wird.

Erstellen Sie eine ASP.NET-Kernwebanwendung (.NET Core) in Visual Studio mit Authentifizierung einzelner Benutzerkonten, um das Problem erneut zu erstellen. Ich nannte mein Projekt Hevn .

Aktualisieren Sie dann project.json , um SQLite anstelle von SQL Server zu verwenden.

// Change from this
"Microsoft.EntityFrameworkCore.SqlServer": "1.0.1",
"Microsoft.EntityFrameworkCore.SqlServer.Design": {
  "version": "1.0.1",
  "type": "build"
},

// to this
"Microsoft.EntityFrameworkCore.Sqlite": "1.0.1",
"Microsoft.EntityFrameworkCore.Sqlite.Design": {
  "version": "1.0.1",
  "type": "build"
},

Aktualisieren Sie dann Startup.cs , um SQLite anstelle von SQL Server zu verwenden:

// Change from this
services.AddDbContext<ApplicationDbContext>(options =>
  options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

// to this
services.AddDbContext<ApplicationDbContext>(options =>
  options.UseSqlite(Configuration.GetConnectionString("DefaultConnection")));

Öffnen Sie dann appsettings.json und ändern Sie DefaultConnection, um die SQLite-Datenbank zu verwenden. (Ich habe meinen Hevn.db genannt ):

// Change DefaultConnection to use SQLite database called Hevn.db
"ConnectionStrings": {
  "DefaultConnection": "Data Source=./Hevn.db"
},

Öffnen Sie dann die Eingabeaufforderung und wenden Sie die Migrationen an, indem Sie zum Projekt dotnet ef database update und die dotnet ef database update

cd "%USERPROFILE%/Documents/Visual Studio 2015/Projects/Hevn/src/Hevn"
dotnet ef database update
dotnet run

Dies erstellt bin/Debug/netcoreapp1.0 Ordner und in diesem Ordner befindet sich Hevn.db Datenbank-Datei. Wenn ich die SQLite-Datei durchsuche, kann ich sehen, dass die für die Authentifizierung notwendigen Tabellen erstellt wurden ( AspNetUsers Tabelle).

Ich kann dies jedoch nicht für den Release-Build tun. Ich kann dotnet build -c Release um eine Release-Version meiner App unter bin/Release/netcoreapp1.0 . Ich kann auch dotnet run -c Release ausführen, um die Release-Version meiner App zu starten. Hevn.db die Release-Version Hevn.db Datei Hevn.db sqlite unter bin/Release/netcoreapp1.0 , aber das Durchsuchen der SQLite-Datei zeigt, dass keine Tabelle erstellt wurde.

An diesem Punkt ist meine einzige Option, die Hevn.db Datei von Debug in Release-Build zu kopieren.

Ich habe auch dotnet ef database update -e Production versucht, aber das erstellt Hevn.db noch Hevn.db unter Debug Build.

Wenn ich meine ASP.NET Core-Webanwendung vor der Migration im Debugmodus ausführe, erhalte ich den folgenden Bildschirm, wenn ich versuche, mich zu registrieren / mich anzumelden. Ich kann einfach auf Migrationen anwenden klicken oder dotnet ef database update , um Migrationen anzuwenden, und Registrierung / Anmeldung funktioniert mit SQLite. Kann die Migration im Debug-Modus anwenden

Aber wenn ich meine ASP.NET Core-Webanwendung im Freigabemodus ausführen, erhalte ich den folgenden Bildschirm, wenn ich versuche, mich zu registrieren / zu registrieren. Es gibt keine Möglichkeit, Migrationen auf den Release-Build anzuwenden. Die Migration kann im Freigabemodus nicht angewendet werden

Ist es möglich, Migrationen auf die Versionserstellung der ASP.NET Core-Webanwendung anzuwenden? Oder muss ich zum Kopieren über Datenbank migrierte SQLite-Datei von Debug zu Release greifen?

Beliebte Antwort

Dieser Befehl hat meine SQLite-Datenbank im Freigabeordner erstellt:

dotnet ef database update --configuration release

aber dann verwende ich das neue msbuild .csproj statt project.json und das neueste SDK. Nicht sicher, ob dich das betrifft?



Related

Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow