首页 > 解决方案 > 现有迁移使用名称“初始”

问题描述

我有这样的配置:ABP 框架:4.2.1 用户界面:MVC 数据库提供程序:EF Core / PostgreSQL 异常:现有迁移使用名称“初始”。

当我启动一个新项目并在 DbMigrator 中运行命令 dotnet run 时,出现错误:现有迁移使用了名称“初始”。

配置

在迁移文件夹中,我只有一个初始迁移

在此处输入图像描述

标签: asp.net.net-coreentity-framework-migrationsabp

解决方案


不知道能不能给你一个肯定的答案,但它来了。首先,我什至没有意识到这个 ABP 框架为您提供了一个完整的模板来工作。我用你在评论中给我的参数创建了一个。

当我查看代码时,DbMigrator调用方法<ProjectName>DbMigrationService.AddInitialMigration(),当框架找不到Migrations文件夹时调用它(并且迁移项目存在,但它是由框架生成的,所以它存在)。这个方法对我没有任何作用(可能我不知道权限不够),但本质上它只是调用一个abpcli 命令来生成第一次迁移。所以我手动运行它。

abp 命令创建初始迁移

这运行成功(我认为在你的情况下)。如果我再次尝试运行它,它显然会失败。这个命令应该只用于Initial迁移(基本上框架有预定义的表并为它生成迁移)。

DbMigrator第二次运行(实际上对其进行了调试),发现这次AddInitialMigration没有为我调用(这是正确的)。我做了一点谷歌搜索的abp create new migration第一个结果,向下滚动了很多(你可以搜索Add-Migration和阅读第一场比赛)。该文档说明了一个示例(我显然没有阅读它),但它有一个基本句子。Now, you can add a new EF Core database migration using the standard Add-Migration command...,这句话对我来说表明必须通过dotnet cli. 所以我创建了它(请原谅版本警告)。

dotnet ef 迁移添加 PleaseWork

第二次迁移后的文件

然后我运行了DbMigratorvia dotnet run,瞧,新的迁移在数据库中。

sqlite 迁移应用截图

所以我的结论是:这是一个花哨的框架,我喜欢代码生成,但这对我来说太多了,它生成的东西太多了,很多没有多年经验的人会迷失在其中。

那么如何生成迁移呢?

  1. 以您想要的方式修改您的Context类和实体。
  2. 通过 手动创建迁移dotnet ef migrations add <migration_name>,确保您在<ProjectName>.EntityFrameworkCore.DbMigrations文件夹中。
  3. DbMigrator通过dotnet run命令运行。

我希望这有帮助。:D

编辑:如果您DbMigrator仍然失败,那么我建议您调试代码,并查看它尝试执行的命令:

var procStartInfo = new ProcessStartInfo(fileName, $"{argumentPrefix} \"abp create-migration-and-run-migrator \"{GetDbMigrationsProjectFolderPath()}\"\"");

procStartInfo(对我来说是第 143 行),将包含实际命令,abp create-migration ...查看它选择的路径并Migrations从该文件夹中清除文件夹,然后重试。


推荐阅读