在我们的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部署设置文件?
答案 0 :(得分:3)
编辑感谢@IvanStoev指出 是一种在源代码中显示的方式。将此添加到您的<PropertyGroup>
:
<EFMigrationsAdditionalArgs>
--project MyApp.MyBdd
</EFMigrationsAdditionalArgs>
原始答案很遗憾,这是不可能的。 EFMigrations由名为GenerateEFSQLScripts
(see source)的构建任务使用,该构建任务始终使用为MSBuildProjectDirectory
变量标识而部署的项目进行迁移。您可以在此处看到正在here正在运行该项目,而没有任何选项可以覆盖它。
我看到两个选择:您可以重构代码,以便DbContext驻留在您正在部署的项目中,或者您可以不在部署过程中而是在应用程序启动时(即添加
)运行迁移 dbContext.Database.Migrate();
您的Startup.Configure()
实现。