Миграция Webdeploy + EFCore: как настроить целевой проект - PullRequest
0 голосов
/ 29 октября 2018

В нашем решении ASP.NET Core 2.1 мы поместили EF и миграции в отдельный проект.

Это хорошо для нас управлять миграциями из проекта по умолчанию благодаря CLI например:

dotnet ef migrations add NewMigration --project MyApp.MyBdd

В этом примере мы устанавливаем MyApp.MyBdd в качестве целевого проекта.

Но мастер WebDeploy не показывает никаких настроек миграции Bdd.

Я могу вручную установить миграцию EF в файл pubxml следующим образом:

Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
       <TimeStampOfAssociatedLegacyPublishXmlFile />
       <EncryptedPassword />
  </PropertyGroup>
  <ItemGroup>
      <EFMigrations Include="MyApp.MyBdd.MyDbContext">
         <Value>Server=MyServer%3bDatabase=MyBdd%3bIntegrated Security=True%3b</Value>
      </EFMigrations>
  </ItemGroup>
</Project>

Сбой генерирования Entity Framework SQL Script (ничего в журналы)

Вопрос : как установить целевой проект в файл настроек webdeploy?

1 Ответ

0 голосов
/ 06 ноября 2018

РЕДАКТИРОВАТЬ Спасибо @IvanStoev за указание, что - это путь, показанный в исходном коде. Добавьте это к вашему <PropertyGroup>:

<EFMigrationsAdditionalArgs>
     --project MyApp.MyBdd
</EFMigrationsAdditionalArgs>

ОРИГИНАЛЬНЫЙ ОТВЕТ К сожалению, это невозможно. EFMigrations используется задачей сборки под названием GenerateEFSQLScripts ( см. Источник ), которая всегда использует развертываемый проект для миграций, как указано в переменной MSBuildProjectDirectory. Здесь вы можете видеть, что это тот проект, который запускается здесь , без каких-либо опций переопределения.

Я вижу два варианта: вы можете выполнить рефакторинг своего кода, чтобы ваш DbContext находился в проекте, который вы развертываете, или вы могли запускать миграции не во время развертывания, а при запуске приложения, т.е. добавьте

dbContext.Database.Migrate();

к вашей Startup.Configure() реализации.

...