9

I have a data-centered application with SQL Server. The environments in which it´ll be deployed are not under our control and there´s no DBA in there (they are all small businesses) so we need the process of distribution of each application/database update to be as automatic as possible.

Besides of the normal changes between versions of an application (kind of unpredictable sometimes), we already know that we´ll need to distribute some new seed data with each version. Sometimes this seed data will be related to other data in our system. For instance: maybe we´ll need to insert 2 new rows of some master data during the v2-v3 update process, and some other 5 rows during the v5-v6 update process.

EF

We have checked Entity Framework Db Migrations (available for existing databases with no Code-First since 4.3.1 release), which represents the traditional sequential scripts in a more automatic and controlled way (like Fluent Migrations).

SSDT

On the other hand, with a different philosophy, we have checked SSDT and its dacpacs, snapshots and pre- and post-deployment scripts.

The questions are:

  1. Which of these technologies / philosophies is more appropriate for the case described?

  2. Any other technology / philosophy that could be used?

  3. Any other advice?

Thanks in advance.

4

2 回答 2

3

这是一个有趣的问题。在 Red Gate,我们希望在今年晚些时候解决这个问题,因为我们有很多客户询问我们如何提供简单的部署包。我们确实有SQL Packager,它本质上将 SQL 脚本包装到 exe 中。

我会说 dacpacs 旨在涵盖您描述的用例。但是,据我了解,它们在应用于目标时会动态生成部署脚本。缺点是您不会有部署预先测试的 SQL 脚本时可能得到的温暖模糊感。

我之前没有尝试过使用 dacpacs 更新数据,所以我很想知道它的效果如何。据我记得,它会截断目标表并重新填充它们。

我没有 EF 迁移的经验,所以我很想阅读有关此主题的任何答案。

于 2012-04-26T14:53:51.337 回答
1

我们可能会采用混合解决方案。我们不想放弃部署打包器的想法,但另一方面,由于我们应用程序的性质(小型企业作为最终用户,没有 DBA,没有义务升级多个“活动”数据库版本并存),我们也不能放弃对迁移过程的完全控制,包括模式和数据。在我们的案例中,部署前和部署后脚本可能不足以(或至少不够舒适),无法像 EF 迁移那样进行完整迁移。诸如添加/删除种子数据、将“一对多”更改为“多对多”关系甚至彻底的数据库架构更改(以及因此,从任何先前发布的架构迁移到此架构的数据)之类的更改可能是我们的一部分我们的第一个版本发布时的日记工作。

因此,我们可能会使用 EF 迁移,每个版本发布都有其“Up”和“Down”系统。原则上,每个“Up”都将使用最后一个数据库快照(以及每个 Down,它的前一个)调用一个 dacpac,每个都有其自己的部署参数用于此特定迁移。EF 迁移将处理版本控制线,这可能也是数据迁移的一些复杂部分。

我们以这种混合方式感到更安全。我们错过了实体框架迁移中的自动​​化和架构更改检测,就像我们错过了 Dacpacs 方式中的版本控制线控制一样。

于 2012-04-27T08:24:47.390 回答