1

Мне не удается применить существующие миграции для 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. Able to apply migration in Debug mode

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

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

ответ

0

dotnet ef database update - правильная команда. Однако по умолчанию он работает в конфигурации отладки. -e изменяет среду (т. е. влияет на код типа env.IsDevelopment()). Он не будет запускаться в Release. -c, прежде чем база данных должна это сделать. См. https://docs.microsoft.com/en-us/ef/core/miscellaneous/cli/dotnet

Другая альтернатива имеет разные соединительные линии на основе среды, а затем вы можете использовать -e для управления используемой средой.

+0

Я уже видел https://docs.microsoft.com/en-us/ef/core/misciety/cli/dotnet, а команда 'dotnet ef database update' не имеет' -c' перед базой данных. Флаг '-c' используется в конце команды для указания контекста, но поскольку я просто использую контекст по умолчанию, я его оставляю. Если я делаю «обновление базы данных dotnet ef -c Release», я получаю сообщение об ошибке «Нет DbContext с именем« Release ». – kimbaudi

+0

Кроме того, я просто попробовал ваше предложение« dotnet ef -c Release database update »и получил сообщение об ошибке« Unrecognized option '-c''. Я все еще склонен полагать, что нет способа применить миграции к сборке Release для SQLite dbs в EF Core. – kimbaudi

0

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

dotnet ef database update --configuration release 

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

+0

Я пробовал обновление базы данных dotnet ef --configuration release и получил ошибку «Unrecognized option» --configuration''. Я использую dotnet версии 1.0.0-preview2-003131, который все еще использует project.json. Можете ли вы рассказать мне, какую версию вы используете ('dotnet -version')? – kimbaudi

+0

1.0.0-предварительный просмотр4-004233. Это означает еще один этап обучения для вас, если вы выберете этот вариант. Я надеялся, что это исправит и вас в вашей версии. –

+0

Возможно, это было названо чем-то другим в предыдущей версии? это дает вам какие-то подсказки? 'dotnet ef обновление базы данных --help' –

Смежные вопросы