实体框架4的数据库迁移

时间:2010-02-04 09:09:52

标签: .net entity-framework database-migration database-versioning

我一直在玩Entity Framework 4,使用模型驱动的方法从我的实体生成数据库脚本。这很好,但我不确定这在数据库版本控制时是如何工作的。我猜我是否想要使用活动记录类型迁移框架,我必须以相反的方式工作并从我的数据库生成我的实体?有没有办法使用模型驱动的方法并正确地对数据库进行版本化?

5 个答案:

答案 0 :(得分:16)

这将很快成为名为EntityFramework.Migrations的NuGet包

Scott Hanselman在TechEd 2011上进行了演示(可在http://channel9.msdn.com/Events/TechEd/NorthAmerica/2011/DEV349在线获得)。相关部分是45分钟。

简而言之,一旦安装了软件包,您将在软件包管理器控制台中输入以下内容以生成数据库更改脚本:

migrate -script

更新(2011年11月13日)

此包的alpha 3版本现在可在NuGet上使用。它不使用上面提到的cmdlet migrate -script,而是使用cmdlet Add-Migration <migrationname>。可以在ADO.NET团队博客上找到walk-through of its use

更新(2012年2月14日)

此功能现在作为主EntityFramework NuGet package的一部分提供,从版本4.3开始。使用EF 4.3的updated walk-through可以在ADO.NET团队博客上找到。

答案 1 :(得分:2)

您可以尝试Wizardby:这是一个管理数据库迁移的工具。它没有与EF集成(因为在这方面它几乎不可能与它集成),但是可以完成工作。

答案 2 :(得分:1)

ScottGu在blog entry中提到了这个问题:

  

我们还将在未来支持EF的“迁移”功能,允许您以编程方式自动执行/脚本数据库模式迁移。

[编辑]

我认为他可能指的是Entity Designer Database Generation Power Pack,正如Morteza Manavi在another SO answer中的回答。

答案 3 :(得分:0)

好吧,如果你想像ActiveRecord一样工作,那么你需要像ActiveRecord一样工作。 :)

但是,如果您想先使用模型但仍然使用迁移,则可以进行迁移,但需要代表您进行额外的工作。 Model-first将生成数据库更改脚本。您必须将相关部分提取到迁移中,以及手动编写撤消脚本。虽然这涉及一些体力劳动,但这并不会让我感到非常困难。

答案 4 :(得分:0)

我正在研究EF.Migrations库的替代方案 - EntityFramework.SchemaCompare。它允许将db模式与表示数据库上下文的实体模型进行物理比较(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