Я не могу применить существующие миграции для ApplicationDbContext в сборке выпуска моего веб-приложения ASP.NET Core с использованием базы данных SQLite. В результате мне приходится копировать файл sqlite .db из сборки Debug (которую я могу применять миграции) в сборку Release, чтобы я мог развернуть ее на своем сервере Ubuntu. Либо так, либо мне нужно вызвать app.UseDatabaseErrorPage();
в методе public void Configure()
внутри Startup.cs
для производственной среды, что не рекомендуется.
Чтобы воссоздать проблему, создайте веб-приложение ASP.NET Core (.NET Core) в Visual Studio с аутентификацией отдельных учетных записей пользователей. Я назвал свой проект Hevn.
Затем обновите project.json
, чтобы использовать SQLite вместо 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"
},
Затем обновите Startup.cs
, чтобы использовать SQLite вместо 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")));
Затем откройте appsettings.json
и измените DefaultConnection на использование базы данных SQLite. (Я назвал свой Hevn.db):
// Change DefaultConnection to use SQLite database called Hevn.db
"ConnectionStrings": {
"DefaultConnection": "Data Source=./Hevn.db"
},
Затем откройте командную строку и примените миграции, перейдя к проекту и запустив dotnet ef database update
cd "%USERPROFILE%/Documents/Visual Studio 2015/Projects/Hevn/src/Hevn"
dotnet ef database update
dotnet run
Это создает папку bin/Debug/netcoreapp1.0
, и внутри этой папки находится файл базы данных Hevn.db
sqlite. Когда я просматриваю файл sqlite, я вижу, что таблицы, необходимые для аутентификации, были созданы (например, таблица AspNetUsers
).
Однако я не могу сделать это для сборки выпуска. Я могу запустить dotnet build -c Release
, чтобы создать выпускную версию моего приложения под bin/Release/netcoreapp1.0
. Я также могу запустить dotnet run -c Release
, чтобы запустить выпускную версию моего приложения. Запуск версии Release создаст файл sqlite Hevn.db
под bin/Release/netcoreapp1.0
, но просмотр файла sqlite показывает, что таблица не создана.
На данный момент мой единственный вариант — скопировать файл Hevn.db
из сборки Debug в сборку Release.
Я также пробовал dotnet ef database update -e Production
, но это все еще создает Hevn.db
в сборке отладки.
Когда я запускаю свое веб-приложение ASP.NET Core в режиме отладки перед применением миграции, я получаю следующий экран при попытке зарегистрироваться или войти в систему. Я могу просто щелкнуть «Применить миграцию» или запустить dotnet ef database update
, чтобы применить миграцию, а регистрация/вход работает с использованием SQLite.
Но когда я запускаю свое веб-приложение ASP.NET Core в режиме выпуска, я получаю следующий экран при попытке зарегистрироваться/войти. Я не могу применить миграции к сборке Release.
Можно ли применить миграции к сборке выпуска веб-приложения ASP.NET Core? Или мне нужно прибегнуть к копированию файла sqlite, перенесенного из базы данных, из Debug в Release?