Cómo aplicar las migraciones existentes para ApplicationDbContext en la versión de lanzamiento de la aplicación web ASP.NET Core utilizando SQLite

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

Pregunta

No puedo aplicar las migraciones existentes para ApplicationDbContext en la versión de lanzamiento de mi aplicación web ASP.NET Core utilizando la base de datos SQLite. Como resultado, tengo que copiar mi archivo sqlite .db desde la compilación de depuración (que puedo aplicar migraciones) a la compilación de la versión solo para poder implementarla en mi servidor Ubuntu. O eso, o tengo que llamar a app.UseDatabaseErrorPage(); en el método public void Configure() dentro de Startup.cs para el entorno de producción, que no se recomienda.

Para recrear el problema, cree una aplicación web ASP.NET Core (.NET Core) en Visual Studio con autenticación de cuentas de usuario individual. Llamé a mi proyecto Hevn .

Luego, actualice project.json para usar SQLite en lugar 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"
},

Luego, actualice Startup.cs para usar SQLite en lugar 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")));

Luego, abra appsettings.json y cambie DefaultConnection para usar la base de datos SQLite. ( Nombré el mío Hevn.db ):

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

Luego, abra el Símbolo del sistema y aplique las migraciones navegando al proyecto y ejecutando la dotnet ef database update

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

Esto crea bin/Debug/netcoreapp1.0 carpeta bin/Debug/netcoreapp1.0 y dentro de esa carpeta reside el archivo de base de datos sqlite Hevn.db Cuando navego por el archivo sqlite, puedo ver que se han creado las tablas necesarias para la autenticación (es decir, la tabla AspNetUsers ).

Sin embargo, no puedo hacer esto para la versión de lanzamiento. Puedo ejecutar dotnet build -c Release para compilar una versión de lanzamiento de mi aplicación en bin/Release/netcoreapp1.0 . También puedo ejecutar dotnet run -c Release para ejecutar la versión Release de mi aplicación. La ejecución de la versión Release creará el archivo sqlite Hevn.db en bin/Release/netcoreapp1.0 , pero al bin/Release/netcoreapp1.0 el archivo sqlite se muestra que no se ha creado ninguna tabla.

En este punto, mi única opción es copiar el archivo Hevn.db de Debug en la versión de lanzamiento.

También probé la dotnet ef database update -e Production , pero eso todavía crea Hevn.db en la compilación de depuración.

Cuando ejecuto mi aplicación web ASP.NET Core en modo de depuración antes de aplicar la migración, aparece la siguiente pantalla cuando intento registrarme / iniciar sesión. Simplemente puedo hacer clic en Aplicar migraciones o ejecutar la dotnet ef database update para aplicar migraciones y el registro / inicio de sesión funciona utilizando SQLite. Capaz de aplicar la migración en modo de depuración

Pero cuando ejecuto mi aplicación web ASP.NET Core en modo Release, aparece la siguiente pantalla cuando intento registrarme / iniciar sesión. No hay forma de que pueda aplicar migraciones a la versión de lanzamiento. No se puede aplicar la migración en modo Release

¿Es posible aplicar migraciones en la versión de lanzamiento de la aplicación web ASP.NET Core? ¿O tengo que recurrir a copiar sobre el archivo sqlite migrado de la base de datos de Debug a Release?

Respuesta popular

este comando creó mi base de datos sqlite en la carpeta de lanzamiento:

dotnet ef database update --configuration release

pero luego estoy usando el nuevo msbuild .csproj en lugar de project.json y el último SDK. ¿No estás seguro de si eso podría estar afectándote?



Related

Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué