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