13

我一直在玩Entity Framework 4,使用模型驱动方法从我的实体生成数据库脚本。这很好,但我不确定在版本化数据库时它是如何工作的。我猜如果我想使用一个活跃的记录类型迁移框架,我不得不以另一种方式工作,并从我的数据库中生成我的实体?有什么方法可以使用模型驱动的方法并正确地版本化数据库?实体框架的数据库迁移4

+0

微软现在此功能的实体框架积极努力,您可以在ADO.NET团队博客的代码首先迁移职位读到它。 http://blogs.msdn.com/b/adonet/ – 2011-09-22 14:15:22

回答

16

这将很快作为NuGet包称为EntityFramework.Migrations

由斯科特Hanselman在2011年微软技术大会(在http://channel9.msdn.com/Events/TechEd/NorthAmerica/2011/DEV349可在线)进行演示。相关的部分是在45分钟内

总之,一旦安装了软件包,你会进入以下到包管理器控制台生成一个数据库更改脚本:

migrate -script 

UPDATE(13 -Nov-2011)

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

UPDATE(14-FEB-2012)

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

+0

+1进行更新 – Karsten 2012-03-14 12:03:25

0

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

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

2

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

+0

超级!这是一个非常有前途的开源项目! – Korayem 2011-12-01 09:25:00

0

我正在致力于替代EF.Migrations库 - EntityFramework.SchemaCompare。它允许将数据库模式与代表数据库上下文的实体模型进行物理比较(EF.Migrations不这样做)。这可以在数据库初始化期间或根据请求手动触发。请看下面的例子

#if DEBUG 
Database.SetInitializer(new CheckCompatibilityWithModel<DatabaseContext>()); 
#endif 

描述DB模式和模型之间的差异数据库初始化过程中它会抛出一个异常,如果不兼容的问题被发现。另外,您可以随时找到代码中的这些差异这样

using (var ctx = new DatabaseContext()) 
{ 
    var issues = ctx.Database.FindCompatibilityIssues(); 
} 

然后有在手,你可以更新数据库架构或模型的差异/不兼容的问题。

当您需要完全控制数据库模式和模型设计和/或在多个团队成员正在使用同一个数据库模式和模型的团队中工作时,此方法特别有用。它也可以用于EF.Migrations之外。

叉我在GitHub上:https://github.com/kriasoft/data