Webdeploy + EFCore迁移:如何设置目标项目

时间:2018-10-29 15:40:16

标签: asp.net-core entity-framework-core webdeploy

在我们的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脚本生成失败(没有写入日志)

问题:如何将目标项目设置为Web部署设置文件?

1 个答案:

答案 0 :(得分:3)

编辑感谢@IvanStoev指出 是一种在源代码中显示的方式。将此添加到您的<PropertyGroup>

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

原始答案很遗憾,这是不可能的。 EFMigrations由名为GenerateEFSQLScriptssee source)的构建任务使用,该构建任务始终使用为MSBuildProjectDirectory变量标识而部署的项目进行迁移。您可以在此处看到正在here正在运行该项目,而没有任何选项可以覆盖它。

我看到两个选择:您可以重构代码,以便DbContext驻留在您正在部署的项目中,或者您可以不在部署过程中而是在应用程序启动时(即添加

)运行迁移

dbContext.Database.Migrate();

您的Startup.Configure()实现。