7

使用 codefirst EF4 重构数据库的最佳实践是什么?

当 RecreateDatabaseIfModelChanges 选项不可行时,我很想听听人们如何更改类和数据库。需要进行数据迁移。

目前微软有一个解决方案,首先使用模型:

http://blogs.msdn.com/b/adonet/archive/2010/02/08/entity-designer-database-generation-power-pack.aspx?PageIndex=2#comments

有没有人有一个好的代码优先策略?

4

3 回答 3

1

我正在研究数据库上下文初始化程序,如果模型和数据库架构不同步,它将通知网站管理员,并显示不同之处。这对于喜欢完全控制代码优先模型和数据库模式的开发人员很有用。一探究竟:

https://github.com/rialib/efextensions

于 2011-03-03T01:13:03.083 回答
1

在我的 CodeFirst 应用程序中,本地构建有一个 app.config 标志,表示未投入生产。当我不在生产中时,它会完全破坏并重新创建数据库。由于我的生产数据库用户无权删除数据库,即使我的 web.config 转换以某种方式丢失(因此 EF 尝试重新创建数据库)我的生产数据库不会被删除,而是会引发异常。

我的工作流程是这样的:

  1. 查看具有最新更改的代码的生产分支
  2. 快速冒烟/回归测试(这应该在将代码检查到生产分支之前已经完成,但以防万一)
  3. 下载我的生产数据库的最新备份并将其安装在我的本地 SQLEXPRESS 服务器上
  4. 在我的本地代码创建的数据库(即使它是生产代码,因为它是本地的,它会重新创建数据库)与生产备份之间运行Open DBDiff 。
  5. 查看生成的脚本并尝试针对生产备份运行它们
  6. 假设没有发生错误,覆盖生产备份代码生成的数据库,并针对生产数据进行测试,以确保所有数据仍然完好;
  7. 在真实的生产数据库上运行脚本。

第 2 步会根据最新的数据模型自动创建一个新的、干净的数据库,所以我始终知道我有一个最新的数据库,其中没有来自开发工作的工件,可能还没有准备好生产。

于 2011-07-07T12:47:04.480 回答
1

EF 团队一直在为 EF 开发迁移功能,应该可以解决这个问题。

http://blogs.msdn.com/b/efdesign/archive/2010/10/22/code-first-database-evolution-aka-migrations.aspx

Scott Gu 在他最近的欧洲巡演中表示,他们应该很快就会发布这个功能。我屏住呼吸。

令人兴奋的更新:

现在已作为 CTP 发布:http: //blogs.msdn.com/b/adonet/archive/2011/07/27/code-first-migrations-august-2011-ctp-released.aspx

于 2011-07-07T12:36:32.090 回答