虽然代码优先非常适合部署,但在开发过程中,我看不到如何在投入生产后以代码优先的方式推动对域模型所做的更改。
我如何处理我们在生产过程中积累的数据?
我是否应该手动将数据从版本 A 架构迁移到版本 B 架构。我是否需要围绕架构进行编码以防止破坏性更改?在初始部署后我是否要告别代码优先并切换到数据库优先?
我错过了什么?
虽然代码优先非常适合部署,但在开发过程中,我看不到如何在投入生产后以代码优先的方式推动对域模型所做的更改。
我如何处理我们在生产过程中积累的数据?
我是否应该手动将数据从版本 A 架构迁移到版本 B 架构。我是否需要围绕架构进行编码以防止破坏性更改?在初始部署后我是否要告别代码优先并切换到数据库优先?
我错过了什么?
首先是免责声明,我对 EF 没有太多经验,我认为它在这方面与 nHibernate 相似。我在这里回答了类似的问题。底线是 EF 和 NHibernate 只是一个 ORM 框架。他们对您的领域有深入的了解,但仅在其当前状态下,他们不了解历史。ORM 可以生成数据库模式,但此功能仅对初始部署和集成测试有用。您不能在不断发展并需要升级(模式和数据)的生产应用程序中依赖它。
以我的经验,没有可以编写升级脚本的神奇工具,它们必须手动编写或至少由开发人员审查。工具可以为您提供执行这些脚本的框架,例如RoundhouseE。斯科特艾伦有一个关于“只进,跑一次”方法的优秀系列。
使用 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。