设计完整的数据库迁移堆栈

在开发过程中,我喜欢像Entity Framework 4.3 Migrations这样的框架(尽管我需要它使用sql脚本而不是Migration类),让所有开发人员数据库保持最新状态。 有人进行更新以获取最新源代码,他们尝试运行应用程序并获取他们需要将其数据库更新到最新迁移(或自动发生迁移)的错误。 迁移文件具有时间戳,因此开发人员不必担心命名两个文件相同或文件需要在其中执行的顺序。

当我准备构建WebDeploy部署包时,我希望包中包含将生产数据库移动到最新的db版本所需的脚本。 所以不知何故,MSBuild或WebDeploy需要决定哪些脚本必须打包。 对于部署,我不希望应用程序尝试像EF提供的那样尝试自我更新。 我想要将软件包交给IT部门,或者通过部署服务器进行自动部署。

我的一些问题是:

  • EF 4.3可以使用sql脚本而不是DBMigration类来满足我的开发需求(我已经将它用于我的ORM,所以它会很好,如果可以的话)?

  • MSBuild或WebDeploy是否理解数据库迁移的概念(例如它是否识别EF 4.3 migrationHistory表),还是必须确保为其提供运行所需的脚本,以便将我的prod db移植到最新的迁移中? 手动确定应该包含哪些脚本不是我想要做的,因此是否存在理解迁移的MS WebDeploy扩展?

  • 我的担忧和想法是否有效? 我只是在研究这个东西,所以我不知道。


  • 我认为你的担忧是有效的。 在开发过程中,任何使开发者机器保持同步的东西都可以。 部署时需要更多的控制。

    在我的项目中,我们决定只使用基于代码的迁移,以确保所有数据库都以相同的步骤以相同的顺序迁移。 自动迁移和数据库创建被自定义初始化策略禁用,该策略仅检查数据库是否存在并且是有效的。

    我已经写了更多关于从创建或更改数据库阻止EF迁移的详细信息。 我也看到了一些合并冲突,最终会发生在多个开发人员身上。


  • 您可以通过调用Sql方法在类中运行SQL,或通过使用-script参数和update-database命令从迁移中生成SQL。

  • 不,他们正在寻求增加对webdeploy的支持,但在rtm之前显然决定反对它。 然而,他们确实发布了一个命令行应用程序(显然是powershell脚本),您可以从中调用。

  • 我在项目中做的是在我的应用程序中创建启动模块,并运行任何尚未自动部署的迁移 - 在应用程序启动时通过代码触发EF迁移。 这并不完美,开发人员必须在更改db之前获取最新版本才能运行应用程序,但它适用于最新和部署。

    链接地址: http://www.djcxy.com/p/62319.html

    上一篇: Designing a full database migration stack

    下一篇: Best way to incrementally seed data in Entity Framework 4.3