代码优先和迁移

时间:2015-03-12 10:31:14

标签: entity-framework ef-code-first ef-migrations

当应用程序处于Live状态时,显然需要对数据库更改进行迭代处理。在db first world中,我将更改databaae项目中的对象(例如,添加到表中的列),然后部署(重新创建)到我的本地实例,然后用我的edmx中的new替换旧表 - 当它进入实时与Live数据库模式的副本相比,从数据库项目生成delta脚本的时间。听起来很啰嗦,但在一天结束时我只做了一次更改(db项目中的对象) - 生成其他所有内容

首先翻转代码(EF6),我期待类似的一次更改体验 - 即我将属性添加到类中 - 但是我是否还需要添加迁移脚本?

我一直在阅读并且似乎有很多人建议禁用迁移以获得更多控制权 - 我很困惑 - 我曾想过简单地部署应用程序,并且下次应用程序运行时,更改会自动反映在目标数据库中 - 有一件事是肯定我不想手动编写单独的部署脚本(或迁移代码)。如上所述,我对这最后一部分感到困惑 - 任何人都可以澄清 - 指出选项

非常感谢

1 个答案:

答案 0 :(得分:1)

简短的回答是,您无需创建“迁移脚本”,如果您愿意,EF可以为您处理。我想当您阅读有关禁用迁移的内容时,您可能实际上正在阅读“禁用自动迁移”#39;无论如何,EF仍会产生迁移。

正如您所指出的那样,在开发时它是一个双重更改的过程:首先,您更改了类,然后打开了Package Manager控制台并调用Add-Migration。通常,您需要做的就是,EF将为您生成更改代码。然后,您致电Update-Database并完成工作。当您进行部署时,您将连接到目标数据库并调用Update-Database一次,它将应用所有待处理的迁移。

您还可以启用跳过Add-Migration步骤的自动迁移,但我总是想查看生成的代码。叫我老式;)

当您需要支持视图,SPROCS和UDF时会变得更加复杂,但是有很多方法可以执行您想要执行的任何操作。而且,即使它是一个2(3?)步骤来更改数据库,它仍然比单独更改数据库和代码更容易。

然后,您可以按照here步骤设置部署,以便在与生产数据库的连接上初始化EF后,它会自动应用更新。同样,我建议你自己做(通过包管理器控制台)只是为了安全,但没有必要。