Как применить существующие миграции для ApplicationDbContext в выпуске сборки веб-приложения ASP.NET Core с использованием SQLite

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

Вопрос

Я не могу применить существующие миграции для ApplicationDbContext в сборке Release моего веб-приложения ASP.NET Core с использованием базы данных SQLite. В результате я должен скопировать мой SQL-файл .db из сборки Debug (который я могу применить миграции) к сборке Release, чтобы я мог развернуть его на моем сервере Ubuntu. Либо это, либо я должен вызвать app.UseDatabaseErrorPage(); в режиме public void Configure() внутри Startup.cs для производственной среды, что не рекомендуется.

Чтобы воссоздать проблему, создайте базовый веб-приложение ASP.NET (.NET Core) в Visual Studio с индивидуальной аутентификацией учетных записей пользователей. Я назвал свой проект Хевном .

Затем обновите 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 в проект и запустив 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 базы данных Hevn.db sqlite. Когда я просматриваю файл sqlite, я вижу, что таблицы, необходимые для аутентификации, были созданы (например, таблица AspNetUsers ).

Однако я не могу это сделать для сборки релиза. Я могу запустить dotnet build -c Release чтобы создать версию версии моего приложения под bin/Release/netcoreapp1.0 . Я также могу запустить dotnet run -c Release чтобы запустить версию Release моего приложения. Запуск версии Release создаст Hevn.db sqlite Hevn.db под bin/Release/netcoreapp1.0 , но просмотр файла sqlite показывает, что таблица не была создана.

На данный момент мой единственный вариант - скопировать файл Hevn.db из Debug в сборку Release.

Я также попробовал dotnet ef database update -e Production , но это все еще создает Hevn.db Debug.

Когда я запускаю свое веб-приложение ASP.NET Core в режиме отладки перед применением миграции, я получаю следующий экран при попытке зарегистрироваться / Логин. Я могу просто нажать «Применить миграцию» или запустить dotnet ef database update для применения миграции и регистрации / входа, используя SQLite. Возможность применения миграции в режиме отладки

Но когда я запускаю свое веб-приложение ASP.NET Core в режиме Release, я получаю следующий экран при попытке зарегистрироваться / Логин. Я не могу применить миграции к сборке Release. Не удалось применить миграцию в режиме деблокирования

Можно ли применять миграции для сборки выпуска веб-приложения ASP.NET Core? Или мне нужно прибегнуть к копированию через базу данных, перенесенного sqlite-файла из Debug to Release?

Популярные ответы

эта команда создала мою базу данных sqlite в папке выпуска:

dotnet ef database update --configuration release

но затем я использую новый msbuild .csproj, а не project.json и последний SDK. Не уверен, что это может повлиять на вас?



Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему