Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用空MigrationHistory表从现有生产数据库迁移实体框架_C#_Entity Framework_Ef Code First_Entity Framework Migrations - Fatal编程技术网

C# 使用空MigrationHistory表从现有生产数据库迁移实体框架

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

我下载了一个带有空MigrationHistory表的生产数据库(内容被意外删除)

我的开发环境中有一个更新的代码模型(没有以前的迁移)

换句话说,下载的生产数据库模式和开发环境代码模型之间存在不匹配,而且它们之间没有历史记录

如何构建代码优先迁移(或获取SQL)以将生产数据库更新到新模型

根据建议,我尝试了以下方法:

  • 在我的项目中启用迁移(
    启用迁移
  • 添加空迁移(
    Add migration InitialCreate-IgnoreChanges
  • 应用此迁移(
    更新数据库
  • 这将导致向MigrationHistory表中添加一行

    然而,EF似乎认为这意味着当前的代码模型与数据库模式匹配(当然,它不匹配)

    如果我尝试添加一个新的迁移(
    Add migration updatemodel
    ),那么这个迁移结果将是空的,因为代码模型和数据库不匹配


    如何获得反映代码模型和数据库模式之间更改的代码优先迁移(或SQL)?(如果我尝试在没有
    -IgnoreChanges
    标志的情况下执行
    Add Migration InitialCreate
    ,我会从头创建整个数据库,正确地反映代码模型,但我需要更改。)

    您遵循的指南中的第一步明确指出,您需要一个与数据库同步的模型。这就是失败的原因

    您需要做的是:

  • 暂时删除当前代码优先模型(即,将当前模型的文件备份到某个位置:文件系统,CVS)
  • 对现有数据库中的代码优先模型进行反向工程
  • 启用迁移并创建初始迁移:
    启用迁移
  • 在这一步中,您的数据库和模型处于同步状态。再多走几步,您就可以开始了:

  • 将模型替换为原始模型(在上一步1中保留的模型)
  • 添加新迁移
    添加迁移
  • 更新数据库:
    更新数据库
  • Tchan!你成功了!顺便说一下,了解migrations命令的每个参数很重要,要做到这一点,请在Package Manager控制台中使用以下任何命令:

    • 获取帮助以启用迁移-示例
    • 获取帮助以启用迁移-详细信息
    • 获取帮助以启用迁移-完整

    简而言之:当您启用迁移时,代码优先模型和数据库必须匹配。没有其他方法可以做到这一点。这就是为什么您必须对数据库进行反向工程以获得初始同步,并从这一点开始工作。

    您可以从源代码管理中获得旧版本的代码,其中模型与当前生产数据库相匹配吗?如果无法使用
    MigrationHistory
    表,则
    Model
    列是一个实际的EDMX文件,该文件经过gzip压缩,然后进行Base64编码。不过不好玩!