Мне не удается применить существующие миграции для ApplicationDbContext в сборке Release моего веб-приложения ASP.NET Core с использованием базы данных SQLite. В результате я должен скопировать мой SQL-файл .db из сборки Debug (который я могу применить миграции) к сборке Release, чтобы я мог развернуть его на моем сервере Ubuntu. Либо это, либо мне нужно позвонить app.UseDatabaseErrorPage();
в метод public void Configure()
внутри Startup.cs
для производственной среды, которая не рекомендуется.Как применить существующие миграции для ApplicationDbContext в выпуске сборки веб-приложения ASP.NET Core с использованием SQLite
Чтобы воссоздать проблему, создайте базовое веб-приложение ASP.NET (.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 моего приложения. Запуск версии Release создаст файл Hevn.db
sqlite под 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.
Можно ли применять миграции при выпуске сборки веб-приложения ASP.NET Core? Или мне нужно прибегнуть к копированию через базу данных, перенесенного sqlite-файла из Debug to Release?
Я уже видел https://docs.microsoft.com/en-us/ef/core/misciety/cli/dotnet, а команда 'dotnet ef database update' не имеет' -c' перед базой данных. Флаг '-c' используется в конце команды для указания контекста, но поскольку я просто использую контекст по умолчанию, я его оставляю. Если я делаю «обновление базы данных dotnet ef -c Release», я получаю сообщение об ошибке «Нет DbContext с именем« Release ». – kimbaudi
Кроме того, я просто попробовал ваше предложение« dotnet ef -c Release database update »и получил сообщение об ошибке« Unrecognized option '-c''. Я все еще склонен полагать, что нет способа применить миграции к сборке Release для SQLite dbs в EF Core. – kimbaudi