使用 EF 4.1 部署数据库更改
Posted
技术标签:
【中文标题】使用 EF 4.1 部署数据库更改【英文标题】:Deploying database changes with EF 4.1 【发布时间】:2011-05-02 20:15:25 【问题描述】:关于在 EF 4.1 代码优先解决方案中部署数据库更改,是否有人有任何最佳实践?我知道 MS 目前不支持 EF 4.1 的数据库迁移,但显然人们有时需要这样做。
谢谢
【问题讨论】:
对于 Code First,Migration Power Pack(我相信是在这个老问题之后引入的)运行良好 - 我仍然会采用适当的差异方法,但 Code First 迁移甚至可以使用 SQL 数据库(又名 Azure SQL),这就是我使用它的原因。 【参考方案1】:将数据库部署到生产环境后,您必须进行增量更改。这意味着在您部署下一个版本之前,您必须在您的开发箱中准备两个数据库:
当前部署在生产环境中的带有 DB 模式的数据库 - 您应该能够从源代码管理中获取此信息,因此请始终正确标记/标记您的生产版本 具有新数据库架构的数据库一旦你有两个数据库,你就可以使用一些工具来为你制作不同的 SQL 脚本。我对两者都有经验:
Visual Studio 2010 Premium / Ultimate Database tools Red Gate SQL Compare这些工具适用于 SQL 服务器。
一旦你有了不同的脚本,你就可以在你的开发箱上测试它。请注意,差异脚本无法创建一些更复杂的更改,并且需要您创建自定义迁移脚本,例如将数据存储在临时表中,同时重构真实表。此外,如果您在新版本中使用了一些新的种子数据,则必须手动将它们添加到脚本中或使用数据比较工具(这两种产品都提供)。
之后,您可以计划中断生产应用程序、数据库备份并运行升级脚本。
【讨论】:
试试github.com/dradovic/MigSharp - 您需要手动创建步骤,但该工具是免费的,效果很好,而且(至少)您会了解您的数据库模型更改。 ApexSQL 也有一些非常好的工具来处理 SQL Server 和模式/数据差异 - 比 VS DB 工具好得多(我发现它只适合一次性生成,不适合持续开发进行广泛的重构)并且比 Red Gate 便宜一点;虽然我没有广泛使用 Red Gate,所以无法比较这两个。以上是关于使用 EF 4.1 部署数据库更改的主要内容,如果未能解决你的问题,请参考以下文章
EntityFramework 4.1 Edm元数据模型哈希
如何使用Entity Framework 4.1 Code First为数据库中的一对多关系强制一对一关系