使用实体框架进行部署后数据库更改的最佳实践

时间:2014-07-11 09:27:09

标签: asp.net entity-framework ef-database-first

我正在开发一个ASP.NET Web Forms项目,即使在部署之后也会遇到很多数据库更改。

我们倾向于使用Entity Framework 5和Database First设计范例。但是,由于我们必须在部署之后对数据库进行大量更改,如果我使用数据库优先方法,那么每次更新数据库时,我都必须删除整个模型并重新生成它。是否有任何最佳做法可以减少这个过程的痛苦?

1 个答案:

答案 0 :(得分:7)

您应该使用Code First,以便可以使用迁移。

更具体地说,我使用手动迁移。

使用手动迁移,您可以随时创建迁移。迁移具有以下信息:

  • 当前模型的快照
  • 一组"指令"从上一次迁移升级
  • 一组"指令"降级到上一次迁移

除了必要的迁移之外,您应该在部署应用时添加新的迁移。例如,当您部署应用程序的1.0版时,可以创建名为"版本1.0"的迁移。

完成每个新的稳定版本后,您只需添加一个新的迁移,例如"版本1.1"或"版本1.2"。

当您拥有已部署的应用程序版本并且需要升级(或降级)到新版本时,会显示迁移的有趣部分。

有些命令可以让您从一个特定版本升级(或降级)数据库 到另一个特定版本。您可以直接指定与DB的连接,也可以创建将更改应用于DB的SQL脚本。例如,如果您在客户服务器中部署了1.0版,并且需要将软件升级到1.2版,则可以执行以下操作:

Update-Database -SourceMigration "Version 1.0" -TargetMigration "Version 1.2" 
      -Script

这将创建一个可以在DB上运行的SQL脚本,从1.0版升级到1.2。

如果您需要有关任何迁移命令的帮助,只需键入:

get-help Update-Database -full

Update-Database是一个命令名称,您可以指定任何其他类似Add-Migration

您可能需要指定模型所在的项目,连接字符串名称,带有.config文件的项目名称或其他一些内容,具体取决于指定的参数,以及解决方案中项目的结构。

要获取有关迁移的更多信息,请阅读MSDN EF Code First Migration

注意在版本中添加:有一个新的数据库初始化程序,可以在应用程序运行时自动迁移到最新版本。我曾在一个真实的应用程序中工作过,它就像一个魅力。

ALTERNATIVE SSDT

如果您不想遵循建议,可以使用SQL Server数据工具(可以安装在VS中,也可以作为独立的应用程序使用,具体取决于您使用的版本)。

此工具的想法是,您可以将项目(数据库模式快照)与现有数据库进行比较,并生成脚本以更改数据库以匹配项目中的模式。 (事实上​​,你可以比较项目和数据库的任何组合)

如果您将项目版本保存在CVS中,您甚至可以检查从项目的一个版本到项目的其他版本的更改。

注意在版本中添加: SSDT项目是一组脚本,可以构建整个数据库,包括其模式中的所有对象。您可以从现有数据库创建它,也可以反之。然后,您可以继续比较DB和SSDT项目的任何组合,作为soruce或target,并创建应用脚本所需的更改每个具有更改的特定对象。 (创建脚本是为了更改目标,使其看起来像源,但您可以轻松地交换源和目标)

这是一种替代解决方案,但迁移功能更强大,因为您可以对其进行自定义,例如填充"主表"创建时,设置新列的初始值,依此类推。如果您使用SSTD,您必须手动完成所有这些操作,并仔细跟踪它。所以我强烈建议使用迁移。