Comment appliquer les migrations existantes pour ApplicationDbContext dans la version Release de l'application Web ASP.NET Core à l'aide de SQLite

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

Question

Je ne parviens pas à appliquer les migrations existantes pour ApplicationDbContext sur la version Release de mon application Web ASP.NET Core utilisant la base de données SQLite. En conséquence, je dois copier sur mon fichier sqlite .db de la version de débogage (que je peux appliquer des migrations) à la version Release pour pouvoir le déployer sur mon serveur Ubuntu. Soit ça, soit je dois appeler app.UseDatabaseErrorPage(); dans la méthode public void Configure() Startup.cs pour l'environnement de production, ce qui n'est pas recommandé.

Pour recréer le problème, créez une application Web ASP.NET Core (.NET Core) dans Visual Studio avec l'authentification de comptes d'utilisateurs individuels. J'ai appelé mon projet Hevn .

Ensuite, mettez à jour project.json pour utiliser SQLite au lieu de 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"
},

Ensuite, mettez à jour Startup.cs pour utiliser SQLite au lieu de 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")));

Ensuite, ouvrez appsettings.json et changez DefaultConnection pour utiliser la base de données SQLite. (J'ai nommé le mien Hevn.db ):

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

Ouvrez ensuite l'invite de commande et appliquez les migrations en dotnet ef database update au projet et en exécutant la dotnet ef database update

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

Cela crée bin/Debug/netcoreapp1.0 dossier bin/Debug/netcoreapp1.0 dans lequel se trouve le fichier de base de données Hevn.db sqlite. Lorsque je navigue dans le fichier sqlite, je constate que les tables nécessaires à l’authentification ont été créées (c’est-à- AspNetUsers table AspNetUsers ).

Cependant, je suis incapable de le faire pour la version release. Je peux exécuter dotnet build -c Release pour créer une version bin/Release/netcoreapp1.0 de mon application sous bin/Release/netcoreapp1.0 . Je peux également exécuter dotnet run -c Release pour exécuter la version Release de mon application. L'exécution de la version Release crée Hevn.db fichier sqlite Hevn.db sous bin/Release/netcoreapp1.0 , mais la recherche du fichier sqlite indique qu'aucune table n'a été créée.

À ce stade, ma seule option consiste à copier le fichier Hevn.db de Debug dans la version Release.

J'ai aussi essayé la dotnet ef database update -e Production , mais cela crée toujours Hevn.db sous Debug Hevn.db .

Lorsque j'exécute mon application Web ASP.NET Core en mode débogage avant d'appliquer la migration, l'écran suivant s'affiche lorsque je tente de m'inscrire / de me connecter. Je peux simplement cliquer sur Appliquer les migrations ou exécuter la dotnet ef database update à dotnet ef database update pour appliquer les migrations. L'inscription et la connexion utilisent SQLite. Capable d'appliquer la migration en mode débogage

Mais lorsque j'exécute mon application Web ASP.NET Core en mode Release, l'écran suivant s'affiche lorsque je tente de m'inscrire / de me connecter. Il est impossible que je puisse appliquer des migrations à la version Release. Impossible d'appliquer la migration en mode de publication

Est-il possible d'appliquer des migrations sur la version Release de l'application Web ASP.NET Core? Ou dois-je recourir à la copie d'un fichier sqlite migré vers une base de données de Debug à Release?

Réponse populaire

cette commande a créé ma base de données sqlite dans le dossier de publication:

dotnet ef database update --configuration release

mais alors j'utilise le nouveau msbuild .csproj plutôt que project.json et le dernier SDK. Vous ne savez pas si cela pourrait vous affecter?



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow