Come applicare le migrazioni esistenti per ApplicationDbContext nella build di rilascio dell'applicazione web ASP.NET Core che utilizza SQLite

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

Domanda

Non sono in grado di applicare le migrazioni esistenti per ApplicationDbContext nella versione Release della mia applicazione Web ASP.NET Core che utilizza il database SQLite. Di conseguenza, devo copiare il mio file sqlite .db da Debug build (che sono in grado di applicare le migrazioni) alla versione Release solo per poterlo distribuire sul mio server Ubuntu. O quello, o devo chiamare app.UseDatabaseErrorPage(); nel public void Configure() metodo all'interno di Startup.cs per ambiente di produzione, che non è raccomandato.

Per ricreare il problema, creare un'applicazione Web principale ASP.NET (.NET Core) in Visual Studio con autenticazione account utente individuale. Ho chiamato il mio progetto Hevn .

Quindi, aggiornare project.json per utilizzare SQLite anziché SQL Server.

// 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"
},

Quindi, aggiornare Startup.cs per utilizzare SQLite anziché SQL Server:

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

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

Quindi, apri appsettings.json e modifica DefaultConnection per utilizzare il database SQLite. (Ho chiamato il mio Hevn.db ):

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

Quindi aprire Prompt dei comandi e applicare le migrazioni navigando al progetto ed eseguendo l' dotnet ef database update

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

Questo crea bin/Debug/netcoreapp1.0 cartella bin/Debug/netcoreapp1.0 e all'interno di quella cartella risiede il file di database sqlite Hevn.db Quando sfoglio il file sqlite, posso vedere che sono state create le tabelle necessarie per l'autenticazione (es AspNetUsers Tabella AspNetUsers ).

Tuttavia, non sono in grado di farlo per la versione di rilascio. Posso eseguire dotnet build -c Release per creare una versione di rilascio della mia app sotto bin/Release/netcoreapp1.0 . Posso anche eseguire dotnet run -c Release per eseguire la versione di rilascio della mia app. L'esecuzione della versione Release creerà Hevn.db file sqlite Hevn.db sotto bin/Release/netcoreapp1.0 , ma sfogliando il file sqlite viene mostrato che non è stata creata alcuna tabella.

A questo punto, la mia unica opzione è copiare il file Hevn.db da Debug in Release build.

Ho anche provato l' dotnet ef database update -e Production , ma questo crea ancora Hevn.db sotto Debug build.

Quando eseguo la mia app Web ASP.NET Core in modalità debug prima di applicare la migrazione, viene visualizzata la schermata seguente quando cerco di registrare / accedere. Posso semplicemente fare clic su Applica migrazioni o eseguire l' dotnet ef database update per applicare le migrazioni e le operazioni di registrazione / accesso tramite SQLite. In grado di applicare la migrazione in modalità debug

Ma quando eseguo la mia app web ASP.NET Core in modalità Release, ottengo la seguente schermata quando tento di registrare / accedere. Non c'è modo in cui posso applicare le migrazioni alla build Release. Impossibile applicare la migrazione in modalità di rilascio

È possibile applicare le migrazioni alla versione di rilascio dell'app web ASP.NET Core? O devo ricorrere alla copia su file sqlite migrato da database da debug a release?

Risposta popolare

questo comando ha creato il mio database sqlite nella cartella di rilascio:

dotnet ef database update --configuration release

ma poi sto usando il nuovo msvest .csproj piuttosto che project.json e l'ultimo SDK. Non sei sicuro che questo possa influenzarti?



Related

Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché