Entity Framework 4 的数据库迁移
Posted
技术标签:
【中文标题】Entity Framework 4 的数据库迁移【英文标题】:Database migrations for Entity Framework 4 【发布时间】:2011-01-12 23:53:00 【问题描述】:我一直在使用 Entity Framework 4,使用模型驱动的方法从我的实体生成数据库脚本。这很棒,但我不确定在对数据库进行版本控制时它是如何工作的。我猜如果我想使用活动记录类型迁移框架,我必须反过来工作并从我的数据库中生成我的实体?有什么方法可以使用模型驱动的方法并正确地对数据库进行版本控制?
【问题讨论】:
Microsoft 现在正在积极开发 Entity Framework 的此功能,您可以在 ADO.NET 团队博客上的 Code First Migrations 帖子中阅读有关它的信息。 blogs.msdn.com/b/adonet 【参考方案1】:这将很快作为一个名为 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 开始。可以在 ADO.NET 团队博客上找到使用 EF 4.3 的 updated walk-through。
【讨论】:
【参考方案2】:你可以试试Wizardby:这是一个管理数据库迁移的工具。它不与 EF 集成(因为在这方面几乎不可能与它集成),但可以完成工作。
【讨论】:
超级!这是一个非常有前途的开源项目!【参考方案3】:ScottGu 在blog entry 中提到了这件事:
我们还将在未来支持 EF 的“迁移”功能,这将允许您以编程方式自动化/编写数据库架构迁移。
[编辑]
我认为他可能指的是Entity Designer Database Generation Power Pack,正如 Morteza Manavi 在another SO answer 中所回答的那样。
【讨论】:
【参考方案4】:好吧,如果你想像 ActiveRecord 一样工作,那么你需要像 ActiveRecord 一样工作。 :)
但是,如果您想使用模型优先但仍使用迁移,这将是可能的,但您需要额外的工作。模型优先将生成一个数据库更改脚本。您必须将相关部分提取到迁移中,以及手动编写撤消脚本。虽然这需要一些体力劳动,但我觉得这并不难。
【讨论】:
【参考方案5】:我正在研究 EF.Migrations 库的替代方案 - EntityFramework.SchemaCompare。它允许将数据库模式与表示数据库上下文的实体模型进行物理比较(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
【讨论】:
以上是关于Entity Framework 4 的数据库迁移的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Entity Framework 4.3.1 中禁用迁移?
如何在 Entity Framework 4.3.1 中禁用迁移?
使用Entity Framework Core管理数据库架构进行数据迁移
使用Entity Framework Core管理数据库架构进行数据迁移