我将项目升级到Entity Framework 4.3并启用了项目迁移。
但是,运行Update-Database命令时出现此错误:
无法构建下一次迁移,因为目标数据库是使用早于EF 4.3的Code First版本创建的,并且不包含迁移历史记录表。要开始对此数据库使用迁移,请确保当前模型与目标数据库兼容并执行迁移更新过程。 (在Visual Studio中,您可以使用Package Manager控制台中的Update-Database命令执行迁移更新过程。)
基本上,它告诉我运行给出错误的相同命令(Update-Database)。
有什么想法吗?
这不是一种“有趣”的方式,但我让应用程序创建了一个新的数据库,它创建了一个名为“__MigrationHistory”的系统表。然后我运行以下脚本在我的旧数据库上创建该表。我还创建了一个脚本,将新数据库中存在的一行复制到旧数据库。
如果来自Microsoft或社区的人知道更有效的方法,请在此处发帖!
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[__MigrationHistory](
[MigrationId] [nvarchar](255) NOT NULL,
[CreatedOn] [datetime] NOT NULL,
[Model] [varbinary](max) NOT NULL,
[ProductVersion] [nvarchar](32) NOT NULL,
CONSTRAINT [PK___MigrationHistory] PRIMARY KEY CLUSTERED
(
[MigrationId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
答案 0 :(得分:3)
当您运行Enable-Migrations
时,脚本可能尚未创建初始迁移,特别是如果您的模型与数据库不匹配,或者您的DbContext
类是在其他项目中定义的。
我不确定将迁移添加到现有4.3之前的数据库的“正确方法”是什么,但最简单的方法是转储数据库。放下桌子......
确保Migrations文件夹中的Configuration文件具有正确的上下文类型,然后Add-Migration Initial
。将构建一个大类,代表您当前的模型。
现在Update-Database
无怨无悔地运行。
如果您在数据库中拥有您关心的数据,则可以作弊并将迁移过程创建的__MigrationHistory
表添加到数据库的先前备份中。删除EdmMetadata
,迁移不应该更明智。
希望有人真正知道如何将迁移添加到现有的EF Code First数据库中,升级步骤会更顺畅吗?
答案 1 :(得分:0)
我刚刚在一个数据库中遇到过这个问题,我“认为”已经是4.3但不是......
我找到了blog post的答案。
这是基本步骤。
现在你可以开始正常的生意了。
这是细节:
请勿更改模型。
如果有,你需要支持这些。 UGGGG。我只是评论了我的变化。幸运的是,对我来说,变化仍然相当小。当然,无论如何,你正在以小块的方式做事。 : - )
添加初始迁移。
Add-Migration "InitialModel" -IgnoreChanges
在up脚本中添加以下内容:
public override void Up()
{
Sql("DROP TABLE EdmMetadata");
}
添加删除表不是必需的,但4.3及以上不要使用EdmMetadata,也可以。
更新数据库(所有这些)
Update-Database
这个数据库有其他服务器吗?测试,分期,生产?一定要为所有这些做最后一步。您可以等到完成所有迁移工作后再对其他服务器执行此操作。
现在,继续正常。进行更改并遵循正常的Add-Migration
& Update-Database
迁移步骤。
答案 2 :(得分:0)
感谢您提出问题和答案。我做了以下(上面的建议组合)。
如何使用数据和Code First模型从pre-EF 4.3迁移:
EdmMetadata
__MigrationHistory
Add-Migration "InitialModel"
__MigrationHistory
表Update-database
__MigrationHistory
生成脚本。添加Drop table EdmMetadata
。Add-Migration YOURNAMEFORNEWCHANGES
Update-Database
我有旧数据库,数据已更新为EF 6.希望有所帮助!