我对使用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)");
一切看起来都很好,它还显示出大量的DropForeignKey
,DropUniqueConstraint
,DropColumn
奇怪的语句。我经历了很多,而且DropX
语句中引用的列都不存在于Database或model类中。这些DropX
语句中的列名通常以X_TempId
,X_TempId1
等结尾。
我要求我的同事(使用git)签出与我完全相同的分支,并运行完全相同的命令(使用完全相同的dotnet
版本),但是他的迁移没有显示任何奇怪的{{1} }语句。如果我错了,请指正我,但我相信DropXYZ
命令会将dotnet ef migrations add ...
的当前状态与Model类中的最新状态进行比较,并创建数据库更改以从当前状态更新到最新状态一。如果是这样,在同一文件集上运行SomethingModelSnapshot
命令应该总是产生相同的结果,不是吗?
关于可能发生的事情和/或如何解决此问题的任何想法?
某些版本:
dotnet ef migrations add ...
答案 0 :(得分:0)
我有同样的问题。我也在使用Core 2.2。可以通过进行新的初始迁移来解决此问题。之后的新迁移不会出现此问题。
答案 1 :(得分:0)
经过一些调查,看来这是EF Core的错误。您可以在on their github这里进行跟踪。
这是从2.1升级到2.2之后发生的。但是请注意,这并不是EF Core 2.2的错误,因为从头开始重新创建新的迁移可以在2.2上很好地工作,但这更多是解释模型快照的重大变化。