asp.net - 现有迁移使用名称“初始”
问题描述
我有这样的配置:ABP 框架:4.2.1 用户界面:MVC 数据库提供程序:EF Core / PostgreSQL 异常:现有迁移使用名称“初始”。
当我启动一个新项目并在 DbMigrator 中运行命令 dotnet run 时,出现错误:现有迁移使用了名称“初始”。
在迁移文件夹中,我只有一个初始迁移
解决方案
不知道能不能给你一个肯定的答案,但它来了。首先,我什至没有意识到这个 ABP 框架为您提供了一个完整的模板来工作。我用你在评论中给我的参数创建了一个。
当我查看代码时,DbMigrator
调用方法<ProjectName>DbMigrationService.AddInitialMigration()
,当框架找不到Migrations
文件夹时调用它(并且迁移项目存在,但它是由框架生成的,所以它存在)。这个方法对我没有任何作用(可能我不知道权限不够),但本质上它只是调用一个abp
cli 命令来生成第一次迁移。所以我手动运行它。
这运行成功(我认为在你的情况下)。如果我再次尝试运行它,它显然会失败。这个命令应该只用于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
. 所以我创建了它(请原谅版本警告)。
然后我运行了DbMigrator
via dotnet run
,瞧,新的迁移在数据库中。
所以我的结论是:这是一个花哨的框架,我喜欢代码生成,但这对我来说太多了,它生成的东西太多了,很多没有多年经验的人会迷失在其中。
那么如何生成迁移呢?
- 以您想要的方式修改您的
Context
类和实体。 - 通过 手动创建迁移
dotnet ef migrations add <migration_name>
,确保您在<ProjectName>.EntityFrameworkCore.DbMigrations
文件夹中。 DbMigrator
通过dotnet run
命令运行。
我希望这有帮助。:D
编辑:如果您DbMigrator
仍然失败,那么我建议您调试代码,并查看它尝试执行的命令:
var procStartInfo = new ProcessStartInfo(fileName, $"{argumentPrefix} \"abp create-migration-and-run-migrator \"{GetDbMigrationsProjectFolderPath()}\"\"");
procStartInfo(对我来说是第 143 行),将包含实际命令,abp create-migration ...
查看它选择的路径并Migrations
从该文件夹中清除文件夹,然后重试。
推荐阅读
- django - Django 频道和 nginx - 握手期间出错
- vuetify.js - 使用图像作为具有填充高度的居中卡片的背景
- informatica - 如何保留部分字符串和部分字符串发送到 informatica 中的掩码
- wordpress - Wordpress CPT 添加新的覆盖现有的
- angular - 带有 Laravel Echo 的 Ionic 5 推送通知
- video - FFmpeg 计算图像到 MP4 视频构建的持续时间不正确
- mapbox - 检测对mapbox中多个标记的点击
- nginx - Nginx 没有启动
- javascript - 在javascript中删除指定的字符串
- reactjs - 使用动态图表 [动画图表]