3

我对使用 EF Core 的应用程序进行了一些简单的更改。我刚刚更改了几个 Decimal 类型列的精度,就是这样。当我尝试使用命令创建新迁移时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语句中引用的列甚至都不存在于数据库或模型类中。这些DropX语句中的列名通常以X_TempId,X_TempId1等结尾。

我让我的同事检查(使用 git)与我完全相同的分支并运行完全相同的命令(使用完全相同的dotnet版本),但他的迁移没有显示任何奇怪的DropXYZ陈述。如果我错了,请纠正我,但我相信该dotnet ef migrations add ...命令会将当前状态SomethingModelSnapshot与模型类中的最新状态进行比较,并创建数据库更改以从当前状态变为最新状态。如果是这样,dotnet ef migrations add ...在同一个文件集上运行命令应该总是产生相同的结果,不是吗?

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

一些版本:

dotnet --version = 2.2.100
dotnet ef --version = 2.2.0-rtm-35687
<TargetFramework>netcoreapp2.1</TargetFramework>
Windows 10, commands executed via Powershell.
4

2 回答 2

1

经过一番调查,这似乎是 EF Core 的一个错误。你可以在他们的 github 上跟踪它。

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

于 2019-01-23T07:58:58.720 回答
0

我有同样的问题。我也在使用 Core 2.2。能够通过进行新的初始迁移来解决它。之后的新迁移没有这个问题。

于 2019-01-09T13:03:15.250 回答