EF Core Migration Add-使用意外的DropForeignKey,DropUniqueConstraint,DropColumn语句创建迁移

时间:2018-12-17 16:44:39

标签: .net-core entity-framework-core ef-core-2.2

我对使用EF Core的应用程序进行了一些简单的更改。我只是更改了几个十进制类型的列的精度而已。当我尝试使用dotnet ef migrations add ...命令创建新迁移时,我看到了希望看到的迁移语句:

        migrationBuilder.AlterColumn<decimal>(
            name: "Value_Amount",
            schema: "Payment",
            table: "Withdrawals",
            type: "DECIMAL(18, 5)",
            nullable: false,
            oldClrType: typeof(decimal),
            oldType: "DECIMAL(15, 2)");

一切看起来都很好,它还显示出大量的DropForeignKeyDropUniqueConstraintDropColumn奇怪的语句。我经历了很多,而且DropX语句中引用的列都不存在于Database或model类中。这些DropX语句中的列名通常以X_TempIdX_TempId1等结尾。

我要求我的同事(使用git)签出与我完全相同的分支,并运行完全相同的命令(使用完全相同的dotnet版本),但是他的迁移没有显示任何奇怪的{{1} }语句。如果我错了,请指正我,但我相信DropXYZ命令会将dotnet ef migrations add ...的当前状态与Model类中的最新状态进行比较,并创建数据库更改以从当前状态更新到最新状态一。如果是这样,在同一文件集上运行SomethingModelSnapshot命令应该总是产生相同的结果,不是吗?

关于可能发生的事情和/或如何解决此问题的任何想法?

某些版本:

dotnet ef migrations add ...

2 个答案:

答案 0 :(得分:0)

我有同样的问题。我也在使用Core 2.2。可以通过进行新的初始迁移来解决此问题。之后的新迁移不会出现此问题。

答案 1 :(得分:0)

经过一些调查,看来这是EF Core的错误。您可以在on their github这里进行跟踪。

这是从2.1升级到2.2之后发生的。但是请注意,这并不是EF Core 2.2的错误,因为从头开始重新创建新的迁移可以在2.2上很好地工作,但这更多是解释模型快照的重大变化。