3

虽然代码优先非常适合部署,但在开发过程中,我看不到如何在投入生产后以代码优先的方式推动对域模型所做的更改。

我如何处理我们在生产过程中积累的数据?

我是否应该手动将数据从版本 A 架构迁移到版本 B 架构。我是否需要围绕架构进行编码以防止破坏性更改?在初始部署后我是否要告别代码优先并切换到数据库优先?

我错过了什么?

4

3 回答 3

2

首先是免责声明,我对 EF 没有太多经验,我认为它在这方面与 nHibernate 相似。我在这里回答了类似的问题。底线是 EF 和 NHibernate 只是一个 ORM 框架。他们对您的领域有深入的了解,但仅在其当前状态下,他们不了解历史。ORM 可以生成数据库模式,但此功能仅对初始部署和集成测试有用。您不能在不断发展并需要升级(模式和数据)的生产应用程序中依赖它。

以我的经验,没有可以编写升级脚本的神奇工具,它们必须手动编写或至少由开发人员审查。工具可以为您提供执行这些脚本的框架,例如RoundhouseE。斯科特艾伦有一个关于“只进,跑一次”方法的优秀系列。

于 2012-02-24T13:35:09.897 回答
2

正如@Henkie 在评论中提到的,EF 数据迁移试图解决您所描述的确切问题。

我现在有一个在生产中使用代码优先 EF 的应用程序,我们所做的是在 EF 旁边构建一个小的模式更新策略。我们有一个了解数据库当前版本的表和一个运行的 sql 脚本目录(迁移数据、更改架构和递增版本表)。

链接:

  1. 基于代码

  2. 自动的

希望这可以帮助。

于 2012-02-24T13:42:29.173 回答
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

于 2012-02-25T02:26:58.493 回答