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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EF Core Migration Add - 使用意外的DropForeignKey,DropUniqueConstraint,DropColumn语句创建迁移相关的知识,希望对你有一定的参考价值。

我对使用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)");

一切看起来都不错,它也显示出大量奇怪的DropForeignKeyDropUniqueConstraintDropColumn声明。我经历了其中的一些,并且DropX语句中引用的列都没有存在于数据库或模型类中。这些DropX语句中的列名通常以X_TempIdX_TempId1等结尾。

我让我的同事检查(使用git)与我的完全相同的分支并运行完全相同的命令(使用完全相同的dotnet版本),但他的迁移没有显示任何奇怪的DropXYZ语句。如果我错了,请纠正我,但我相信dotnet ef migrations add ...命令将SomethingModelSnapshot的当前状态与Model类中的最新状态进行比较,并创建DB更改以从当前状态转换到最新状态。如果是这样的话,在同一个文件集上运行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.
答案

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

另一答案

经过一些调查,似乎这是EF Core的一个错误。你可以在这里跟踪on their github

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

以上是关于EF Core Migration Add - 使用意外的DropForeignKey,DropUniqueConstraint,DropColumn语句创建迁移的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Core EF Add-Migration 命令不起作用

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

EF Core codefirst数据迁移

EF Core ASP.Net Core 编辑迁移

为啥 ef Add-Migration 出现错误

text EF Core Tutorials with migration