实体框架:需要一种简单易用、干净的数据库迁移解决方案。

3
我正在使用实体框架模型优先开发,并且经常需要进行数据库迁移。EF数据库生成工具包并没有帮上太多的忙,因为数据迁移从未在这里起作用过。我所说的数据库迁移是指更改模型,然后可以从模型更新现有数据库,而不是创建一个新的数据库。是否已经有免费的工具在此处发明了?或者这将成为下一个EF版本的新功能吗?PS:我喜欢Django的ORM。

请查看EntityFramework.SchemaCompare - Konstantin Tarkus
3个回答

1

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

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


.NET在数据库迁移方面功能较弱,这令人感到非常尴尬。 - user469652
我不确定这是一个差劲的功能。只是从逻辑上讲,这个要求相当复杂,需要以保持使用简单和清晰的方式来实现。为了允许迁移,它需要找出您在代码中进行了哪些更改以及您在数据库中想要做什么。有很多情况下,答案并不清楚。为了克服这一点,您将需要能够以表达模型更改的方式注释您的代码,这使得这个功能比最初的功能复杂得多。 - Kobi Hari

1

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

另外,我一直在使用 ApexSQL Data Diff 工具来编写基础数据(如查找表)的更改脚本。

我一直对Visual Studio 2010和SQL Server 2008 R2的数据层应用程序功能感到着迷。它似乎将要创建的数据库的元数据描述存储起来,因此当您重新部署DAC包时,它会比较元数据以查看是否有更改。然后,它仅更改实际需要更改的数据库部分。这应该允许使用单个部署包升级不同版本级别的数据库,而无需单独为每个版本编写升级脚本。尽管如此,我还没有使用过它,并且我相信它仅限于SQL Server 2008 R2。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接