C# 使用空MigrationHistory表从现有生产数据库迁移实体框架
我下载了一个带有空MigrationHistory表的生产数据库(内容被意外删除) 我的开发环境中有一个更新的代码模型(没有以前的迁移) 换句话说,下载的生产数据库模式和开发环境代码模型之间存在不匹配,而且它们之间没有历史记录 如何构建代码优先迁移(或获取SQL)以将生产数据库更新到新模型 根据建议,我尝试了以下方法:C# 使用空MigrationHistory表从现有生产数据库迁移实体框架,c#,entity-framework,ef-code-first,entity-framework-migrations,C#,Entity Framework,Ef Code First,Entity Framework Migrations,我下载了一个带有空MigrationHistory表的生产数据库(内容被意外删除) 我的开发环境中有一个更新的代码模型(没有以前的迁移) 换句话说,下载的生产数据库模式和开发环境代码模型之间存在不匹配,而且它们之间没有历史记录 如何构建代码优先迁移(或获取SQL)以将生产数据库更新到新模型 根据建议,我尝试了以下方法: 在我的项目中启用迁移(启用迁移) 添加空迁移(Add migration InitialCreate-IgnoreChanges) 应用此迁移(更新数据库) 这将导致向Migra
启用迁移
)Add migration InitialCreate-IgnoreChanges
)更新数据库
)Add migration updatemodel
),那么这个迁移结果将是空的,因为代码模型和数据库不匹配
如何获得反映代码模型和数据库模式之间更改的代码优先迁移(或SQL)?(如果我尝试在没有
-IgnoreChanges
标志的情况下执行Add Migration InitialCreate
,我会从头创建整个数据库,正确地反映代码模型,但我需要更改。)您遵循的指南中的第一步明确指出,您需要一个与数据库同步的模型。这就是失败的原因
您需要做的是:
启用迁移
添加迁移
更新数据库
获取帮助以启用迁移-示例
获取帮助以启用迁移-详细信息
获取帮助以启用迁移-完整
简而言之:当您启用迁移时,代码优先模型和数据库必须匹配。没有其他方法可以做到这一点。这就是为什么您必须对数据库进行反向工程以获得初始同步,并从这一点开始工作。您可以从源代码管理中获得旧版本的代码,其中模型与当前生产数据库相匹配吗?如果无法使用
MigrationHistory
表,则Model
列是一个实际的EDMX文件,该文件经过gzip压缩,然后进行Base64编码。不过不好玩!