实体框架 4 的数据库迁移
-
25-09-2019 - |
题
我一直在使用 Entity Framework 4,使用模型驱动方法从我的实体生成数据库脚本。这很棒,但我不确定在数据库版本控制方面它是如何工作的。我猜如果我想使用活动记录类型迁移框架,我必须以相反的方式工作并从数据库生成我的实体?有没有办法使用模型驱动方法并正确版本数据库?
解决方案
这将很快以名为 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>
. 。A 其使用演练 可以在 ADO.NET 团队博客上找到。
更新(2012 年 2 月 14 日)
此功能现在作为主要功能的一部分提供 EntityFramework NuGet 包, ,从 4.3 版本开始。一个 更新了演练 使用 EF 4.3 可以在 ADO.NET 团队博客上找到。
其他提示
您可以尝试 Wizardby :这是用于管理数据库迁移的工具。它不与EF集成(因为它几乎是不可能在这方面与它集成),但做这项工作。
ScottGu 在一篇文章中提到了一些关于此事的内容 博客条目:
将来我们还将支持 EF 的“迁移”功能,该功能将允许您以编程方式自动执行/编写数据库架构迁移脚本。
[编辑]
我想他可能指的是 实体设计器数据库生成电源包, ,正如 Morteza Manavi 在 另一个SO答案.
好吧,如果你想要像ActiveRecord的工作,那么你就需要像ActiveRecord的工作。 :)
不过,如果你想使用模型的第一,但仍然使用迁移,这将是可能的,但需要以您的名义额外的工作。模型首先会生成一个数据库更改脚本。你将不得不相关部分提取到迁移,以及手动编写取消脚本。虽然这涉及一些体力劳动,它不打我作为非常困难。
我正在替代EF.Migrations库 - EntityFramework.SchemaCompare 。它允许身体比较一个DB模式与代表数据库环境(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