从EF 6 Code First迁移和多个配置生成完整的SQL脚本

5

我正在尝试生成完整的SQL脚本以部署我的应用程序。 我知道从包管理器控制台运行此命令应该会创建完整的SQL脚本(请参见这个SO问题

Update-Database -Script -SourceMigration:0 

我也看到了$InitialDatabase可以在源迁移中代替'0'。

但是我在我的迁移文件夹中有两个配置。对于这个问题,我使用以下语法:

Update-Database -Script -SourceMigration:0 -ConfigurationTypeName MyConfig

我得到了所有配置的空脚本。
需要注意的是,我启用了自动迁移,并没有添加任何明确的迁移。
1个回答

2
在同一命名空间中拥有两个迁移配置是不支持的情况。我们最近把类似于这个错误归结为“设计如此”。解决方法是将迁移配置放在不同的命名空间中。
解决此问题的最可靠方法就是将您的配置放在不同的文件夹中,并使用下面所示的MigrationsDirectory变量,然后任何为配置生成的显式迁移都应放置在同一个文件夹中。
    internal sealed class Configuration : DbMigrationsConfiguration<TestMultipleMigrationsScript.BlogContext>
{
    public Configuration()
    {
        AutomaticMigrationsEnabled = false;
        MigrationsDirectory = @"directory";
    }

}

1
它们位于不同的命名空间中(如果实际上下文类位于不同的程序集中,则这点很重要)。我可以在包管理器中随意使用“update-database”,它可以毫无问题地工作。只是它不会生成SQL代码(我的解决方法是使用SSMS导出DDL)。 - Leonardo Herrera
即使两个迁移配置在同一个目录中具有不同的命名空间,也应支持该场景。如果您能够重现此情况,请在entityframework.Codeplex.com上记录错误。我已编辑了我的解决方案,并提供了一些示例代码来指定MigrationsDirectory,这是每个解决方案中具有多个迁移上下文的推荐方法。 - lukew
正如我所说,直接从框架管理器更新数据库完美无缺。只是 SQL 脚本没有被生成。 - Leonardo Herrera

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接