自动迁移与基于代码的迁移

Jam*_*mes 20 entity-framework ef-migrations

我正在学习EF4.3迁移,我从ado.net团队博客上读过这两篇文章:

http://blogs.msdn.com/b/adonet/archive/2012/02/09/ef-4-3-code-based-migrations-walkthrough.aspx

http://blogs.msdn.com/b/adonet/archive/2012/02/09/ef-4-3-automatic-migrations-walkthrough.aspx

但在阅读了这两篇文章之后,我仍然不清楚它们之间的差异以及何时使用基于代码的迁移,何时使用自动迁移.有人可以指导我吗?

谢谢!

Lad*_*nka 22

这些文章非常清楚,所以如果你不理解它们之间的区别,那就意味着你在阅读文本时并没有集中注意力,而且你也可能没有按照自己编写的例子来遵循文本.

自动迁移只是一个神奇的工具.运行应用程序时,您将始终使用最新版本获取数据库,因为EF将在每次需要时执行隐式迁移 - 在最纯粹的版本中,除了启用自动迁移之外,您永远不需要执行任何操作.

自动迁移有时是不够的.您需要为迁移代码添加一些自定义或运行一些其他SQL命令,例如转换数据.在这种情况下,您可以通过调用Add-Migrationcommand 添加基于代码的显式迁移 显式迁移显示将在迁移期间执行的所有迁移代码(没有额外的魔法).

如果关闭自动迁移,则必须始终定义显式迁移,以便在明确定义的显式步骤中定义数据库升级过程.这对于需要同时使用升级和降级到特定版本的情况尤其有用.

  • EF docs示例本身显示了自动迁移不够的情况:如果需要使用非默认值(即int列的3而不是0)初始化非空列,则需要添加手册迁移以指定它.只是为@ LadislavMrnka的评论添加另一个案例. (3认同)
  • @Steven:你不会在任何地方找到限制列表.有时您可以进行更改,这不仅需要更改表结构,还需要转换数据 - 这需要手动处理数据的代码迁移.有时您想要添加更多SQL功能 - 索引,约束atc.同样,只有代码迁移才有可能.大多数情况下,只要你需要使用`Sql`或`CreateIndex`或`DropIndex`方法,它就会调用代码迁移. (2认同)