无法使用 Ef Core 删除数据库迁移
Posted
技术标签:
【中文标题】无法使用 Ef Core 删除数据库迁移【英文标题】:Can't remove Database Migration with Ef Core 【发布时间】:2020-07-09 21:52:10 【问题描述】:好吧,我正在尝试恢复数据库迁移,只需添加一列,请参阅:
public partial class CreateColumnTypeCamera : Migration
protected override void Up(MigrationBuilder migrationBuilder)
migrationBuilder.AddColumn<string>(
name: "type",
table: "CAMERA",
type: "varchar",
nullable: false,
defaultValue: "");
protected override void Down(MigrationBuilder migrationBuilder)
migrationBuilder.DropColumn(
name: "type",
table: "CAMERA");
执行dotnet ef database update
后一切正常,我的数据库也更新了。但是我想还原它,所以我尝试了dotnet ef database update CreateColumnTypeCamera
:
[ronaldo@localhost WebApi]$ dotnet ef database update CreateColumnTypeCamera
Done.
如您所见,我得到了“完成”,但没有还原任何内容,也没有删除该列。如果我尝试删除我的迁移,则会收到错误消息:
[ronaldo@localhost WebApi]$ dotnet ef migrations remove
The migration '20200329134024_CreateColumnTypeCamera' has already been applied to the database. Revert it and try again. If the migration has been applied to other databases, consider reverting its changes using a new migration.
编辑 1:
我将“更新”命令应用于“LastGoodMigration”,而不是我的错误迁移,一切正常。但是remove中的错误继续,所以我注意到这是因为这一行:
if (Database.ProviderName != "Microsoft.EntityFrameworkCore.InMemory")
Database.Migrate();
有什么办法可以解决吗?如果我尝试使用此行应用“ef remove”,则会收到上面显示的错误。
【问题讨论】:
这能回答你的问题吗? EF Migrations: Rollback last applied migration? 不满意,因为我使用的是 donet ef 工具而不是“包管理器”,在我的情况下,我只想回滚特定的迁移,我有这个名字。 重点是更新到previous迁移。并且“删除”从您的源代码中删除迁移,而不是从数据库中删除。所以这不是你想要的。 对不起,我没听懂。我应该在“CreateColumnTypeCamera”之前和删除它之后更新到迁移吗?我知道我需要删除对“CreateTypeCamera”的更新,并在删除它之后。 是的。先“更新”到 CreateColumnTypeCamera 之前的迁移。 【参考方案1】:转到数据库,表 EF_migrations 并删除具有特定 ID(表行)的迁移,然后您可以从迁移文件夹中删除文件。不要忘记手动更新受此迁移影响的表。
【讨论】:
这个解决方案完全是手动的,这可行但不是一个好的选择,在我的选择中应该使用“dotnet ef 工具”。【参考方案2】:你需要运行
update-database OneMigrationBeforeTheOneYouWantToRemove
将数据库更新到您要删除的数据库的先前迁移。这将恢复数据库上的更改,并从 _migrations 表中删除迁移。
之后就可以运行了:
Remove-Migration
这将删除最后一次迁移,您可以运行它 'n' 次,直到达到想要删除的迁移。
【讨论】:
以上是关于无法使用 Ef Core 删除数据库迁移的主要内容,如果未能解决你的问题,请参考以下文章