虽然代码优先非常适合部署,但在开发过程中,我无法看到如何在生产后以代码优先的方式推动对域模型所做的更改。
我们在制作期间积累的数据怎么办?
我是否应该手动将数据从版本A架构迁移到版本B架构。我是否需要围绕架构进行编码以防止发生变化?在初始部署之后,我是否先告别代码优先并切换到数据库优先?
我错过了什么?
答案 0 :(得分:2)
首先是免责声明,我对EF没有太多经验,我认为它在这方面与nHibernate相似。我回答了类似的问题here。底线是EF和NHibernate只是一个ORM框架。他们对您的域名有深入的了解,但仅限于当前状态,他们不了解历史。 ORM可以生成数据库模式,但此功能仅适用于初始部署和集成测试。您不能在生产应用程序中依赖它,这些应用程序不断发展并需要升级(对于架构和数据)。
根据我的经验,没有可以编写升级脚本的神奇工具,它们必须手动编写或至少由开发人员审核。工具可以为您提供执行这些脚本的框架,例如RoundhouseE。斯科特艾伦有一个excellent series关于'仅向前,一次运行'的方法。
答案 1 :(得分:2)
如@Henkie的评论中所述,EF Data Migrations试图解决您所描述的确切问题。
我现在有一个在生产中使用代码优先EF的应用程序,我们所做的是在EF旁边构建一个小的架构更新策略。我们有一个表可以了解数据库当前所使用的版本以及运行的sql脚本目录(迁移数据,更改模式和增加版本表)。
链接:
希望这有帮助。
答案 2 :(得分:2)
使用EF 4.3。您需要使用迁移,并且可以使用现有数据库执行此操作。
这是一篇很棒的博客文章,关于你所谈论的内容:来自Julie Lerman的Using EF 4.3 Code First Migrations with an Existing Database。
我现在也在写博客:Using Entity Framework Code First with an existing database。