如何首先使用EF 4代码重构代码/数据库模式 - 数据迁移

时间:2010-08-29 01:31:09

标签: c# entity-framework ef4-code-only

使用codefirst EF4进行数据库重构的最佳做法是什么?

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

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

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

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

3 个答案:

答案 0 :(得分:1)

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

https://github.com/rialib/efextensions

答案 1 :(得分:1)

EF团队一直致力于解决此问题的EF迁移功能。

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

斯科特古德最近在欧洲巡回演讲时表示,他们应该尽快发布此功能。我屏住呼吸。

激动人心的更新:

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

答案 2 :(得分:1)

在我的CodeFirst应用程序中,本地版本有一个表示不在生产中的app.config标志。当我不在制作中时,它会完全核实并重新创建数据库。由于我的生产数据库用户没有删除数据库的权限,即使我的web.config转换以某种方式被遗漏(因此EF尝试重新创建数据库),我的生产数据库也不会被删除,而是抛出异常。

我的工作流程如下:

  1. 查看具有最新更改的代码的生产分支
  2. 快速吸烟/回归测试(这应该在将代码检入生产分支之前完成,但以防万一)
  3. 下载我的生产数据库的最新备份并将其安装在我的本地SQLEXPRESS服务器上
  4. 在我的本地代码创建的数据库之间运行Open DBDiff(即使它是生产代码,因为它是本地的,它会重新创建数据库),而不是生产备份。
  5. 查看生成的脚本并尝试针对生产备份运行它们
  6. 假设没有发生错误,请覆盖使用生产备份生成的代码的数据库,并对生产数据进行测试,以确保所有数据仍然完好无损;
  7. 在真实的生产数据库上运行脚本。
  8. 步骤#2基于最新的数据模型自动创建一个新的,干净的数据库,所以我总是知道我有一个最新的数据库,它没有来自可能还没有生产就绪的开发工作的工件。