实体框架:需要一个简单,干净的数据库迁移解决方案

时间:2011-01-02 22:10:12

标签: .net entity-framework

我正在使用实体框架模型第一次开发,我需要经常进行数据库迁移,

EF数据库生成电源组没有多大帮助,因为数据迁移在这里从未起作用。

这里的数据库迁移我的意思是,更改模型,然后我可以从模型更新现有数据库,但创建一个新数据库。

这里发明了免费工具吗?或者这会成为下一个EF版本的新功能吗?

PS:我喜欢django的ORM。

3 个答案:

答案 0 :(得分:1)

大约4个月前有同样的问题。我们正在考虑EF,我们无法解决的唯一问题是使用“代码优先”方法时的数据库迁移。

从代码创建新数据库很容易,但如果您已经拥有从代码创建的数据库,现在您向其中一个类添加新属性,或者更糟糕的是,更改其类型或名称。我找了一个解决这个问题的解决方案很长一段时间但找不到任何东西。从问题的本质来看,我怀疑很快就会有解决方案。 EF需要能够“记住”创建原始数据库模式的代码,然后在原始代码和当前代码之间执行自动“差异”,最后分析更改并在数据库模式上以一种方式实现它们不会破坏存储的数据......它需要能够处理可能的重构,类重命名等。我怀疑这将很快成为一个功能......

答案 1 :(得分:1)

我现在使用一些工具进行迁移,包括EF模型和通过NORMA工具生成的模式。我主要使用ApexSQL Diff工具,然后通过他们的ApexSQL Edit工具运行生成的脚本。使用Diff工具,我将从模型创建的数据库与“当前”数据库进行比较,以创建更改脚本。我使用后者是因为它会将执行分解为批次并分别显示每个批次的错误(如果有任何错误)。

在相关的说明中,我一直在使用ApexSQL Data Diff工具来编写基本数据(如查找表)的更改。

我对Visual Studio 2010和SQL Server 2008 R2的Data-Tier Applications功能很感兴趣。它似乎存储了要创建的数据库的元数据描述,因此在重新部署DAC包时,它会比较更改的元数据。然后它只更改实际需要更改的数据库部分。这应该允许使用单个部署包来升级数据库的不同修订级别,而无需单独的每个版本的升级脚本。我还没有使用它,我相信它仅限于SQL Server 2008 R2。

答案 2 :(得分:0)

它不是免费的,但有30天的免费试用版:这是一个解决这个问题的工具(通过生成SQL-DDL增量更改脚本),以及EF4设计器中的许多其他缺点:
http://huagati.com/edmxtools/

介绍视频:
http://huagati.blogspot.com/2010/07/introducing-model-comparer-for-entity.html