【问题标题】:Database migrations for Entity Framework 4Entity Framework 4 的数据库迁移
【发布时间】:2011-01-12 23:53:00
【问题描述】:
我一直在使用 Entity Framework 4,使用模型驱动的方法从我的实体生成数据库脚本。这很棒,但我不确定在对数据库进行版本控制时它是如何工作的。我猜如果我想使用活动记录类型迁移框架,我必须反过来工作并从我的数据库中生成我的实体?有什么方法可以使用模型驱动的方法并正确地对数据库进行版本控制?
【问题讨论】:
-
Microsoft 现在正在积极开发 Entity Framework 的此功能,您可以在 ADO.NET 团队博客上的 Code First Migrations 帖子中阅读有关它的信息。 blogs.msdn.com/b/adonet
标签:
.net
entity-framework
database-migration
database-versioning
【解决方案2】:
你可以试试Wizardby:这是一个管理数据库迁移的工具。它不与 EF 集成(因为在这方面几乎不可能与它集成),但可以完成工作。
【解决方案4】:
好吧,如果你想像 ActiveRecord 一样工作,那么你需要像 ActiveRecord 一样工作。 :)
但是,如果您想使用模型优先但仍使用迁移,这将是可能的,但您需要额外的工作。模型优先将生成一个数据库更改脚本。您必须将相关部分提取到迁移中,以及手动编写撤消脚本。虽然这需要一些体力劳动,但我觉得这并不难。
【解决方案5】:
我正在研究 EF.Migrations 库的替代方案 - EntityFramework.SchemaCompare。它允许将数据库模式与表示数据库上下文的实体模型进行物理比较(EF.Migrations 不这样做)。这可以在数据库初始化期间触发,也可以根据请求手动触发。考虑下面的例子
#if DEBUG
Database.SetInitializer(new CheckCompatibilityWithModel<DatabaseContext>());
#endif
如果发现不兼容问题,它将在数据库初始化期间抛出异常,描述数据库模式和模型之间的差异。或者,您可以通过这种方式随时在代码中找到这些差异
using (var ctx = new DatabaseContext())
{
var issues = ctx.Database.FindCompatibilityIssues();
}
如果手头有这些差异/不兼容问题,您可以更新数据库架构或模型。
当您需要完全控制数据库架构和模型设计和/或在多个团队成员处理相同数据库架构和模型的团队中工作时,这种方法特别有用。除了 EF.Migrations 之外,它也可以使用。
在 GitHub 上叉我:https://github.com/kriasoft/data