【问题标题】:ef database updata is unable to find migrationef 数据库 updata 找不到迁移
【发布时间】:2023-02-08 22:17:17
【问题描述】:

我正在尝试对多个 DBContext 之一执行合并或合并迁移。 我们有一个使用多个数据库的 .NET 6 解决方案。所有数据库上下文都在单独的文件夹中的单个项目中定义。 IE。

Solution\
- Business_Logic_Project_1\
- Business_Logic_Project_2\
- Business_Logic_Project_3\
- Database_Project\
    - Context1\
        - Migrations\
        - Models\
        - Context1.cs
    - Context2\
        - Migrations\
        - Models\
        - Context2.cs
    - Context3\
        - Migrations\
        - Models\
        - Context3.cs
    - Database_Project.csproj
- Startup_Project
    - Startup_Project.csproj
- Solution.sln

我执行以下操作:
我打开命令提示符并转到解决方案的根目录。
然后我删除了 Database_Project\Context2\Migrations 中的所有迁移。
然后我执行这个命令:

dotnet ef migrations add <<MIGRATION_NAME>> --context Context2 --project Database_Project --startup-project Startup_Project --output-dir Context2\Migrations

我清空数据库中的 __EFMigrationsHistory 表。 最后,我运行此命令来完成整合:

dotnet ef database update <<MIGRATION_NAME>> --context Context2 --project Database_Project --startup-project Startup_Project

失败并显示错误消息:The migration '&lt;&lt;MIGRATION_NAME&gt;&gt;' was not found.

所以我思考这是因为迁移被放置在上下文文件夹下,数据库更新命令看起来不那么深。似乎没有办法告诉命令在哪里寻找迁移,那么该怎么办呢?

【问题讨论】:

    标签: entity-framework-core entity-framework-migrations


    【解决方案1】:

    很难查明确切原因,但是,在更新命令中提供迁移名称时,您是否包括了 .cs 扩展名?如果是这样,请尝试不使用它。

    其他可能性包括

    • 命令中有一些拼写错误
    • 缺少迁移设计器文件

    【讨论】:

    • 我只使用迁移名称,开头没有 .cs 和时间戳。设计器文件存在。当然有可能打错了,我会检查一下。
    【解决方案2】:

    好吧,我想通了,但是我忘记了这个问题,所以我不记得这个问题以及我是如何解决它的。

    但是,我发现这些步骤有效:

    • 第一步:删除Migrations文件夹下的所有*.cs文件。 *ModelSnapshot.cs 除外。

    • 第 2 步:将所有记录从 __EFMigrationHistory 复制到 __EFMigrationHistoryBackup:

    INSERT INTO dbo.[__EFMigrationHistoryBackup] (MigrationId, ProductVersion) 
    SELECT MigrationId, ProductVersion FROM dbo.[__EFMigrationsHistory]
    
    • 第 3 步:清空 __EFMigrationsHistory 表:
    DELETE FROM dbo.[__EFMigrationHistory]
    
    • 第 4 步:创建一个新的迁移,例如:dotnet ef migrations add Migration_Merge_2022Q4。 迁移的 Up() 和 Down() 方法都应该为空。如果不是,请注释掉这两个方法中的所有代码。

    • 第 5 步:更新数据库,如:dotnet ef database update。这应该在 __EFMigrationHistory 表中添加一条新记录,但由于 Up() 和 Down() 为空,因此不会对数据库进行任何更改。

    • 第 6 步:取消注释 Up() 和 Down() 方法。

    • 第 7 步:将更改签入 Git。

    【讨论】:

      猜你喜欢
      • 2022-09-29
      • 1970-01-01
      • 2018-06-02
      • 2018-06-19
      • 2019-08-03
      • 1970-01-01
      • 1970-01-01
      • 2014-02-19
      • 1970-01-01
      相关资源
      最近更新 更多