EF Core 5 在迁移中创建了两次表

EF Core 5 creates tables twice in migrations

我已经创建了一个项目和一个迁移,但是在添加新的迁移时,迁移似乎并不关心以前的迁移,也就是说,迁移文件只是试图创建相同的 tables两次。

我创建了两个迁移,FirstSecond。发生变化的是我将字符串 属性 添加到 Post 实体(此处未显示)。我期望的是如下内容:

migrationBuilder.AddColumn(...)

但是我得到了一个 Second 迁移,其中包含 First 迁移中的所有内容,但是在创建 table Post 时,它有添加的列。几乎就像它甚至不关心有一个 First 迁移,因此就像它有史以来的第一次迁移。

第一

public partial class First : Migration
{
    protected override void Up(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.CreateTable(
            name: "AspNetRoles",
            columns: table => new
            {
                Id = table.Column<string>(type: "nvarchar(450)", nullable: false),
                Name = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: true),
                NormalizedName = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: true),
                ConcurrencyStamp = table.Column<string>(type: "nvarchar(max)", nullable: true)
            },
            constraints: table =>
            {
                table.PrimaryKey("PK_AspNetRoles", x => x.Id);
            });
    ...

第二

public partial class Second : Migration
{
    protected override void Up(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.CreateTable(
            name: "AspNetRoles",
            columns: table => new
            {
                Id = table.Column<string>(type: "nvarchar(450)", nullable: false),
                Name = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: true),
                NormalizedName = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: true),
                ConcurrencyStamp = table.Column<string>(type: "nvarchar(max)", nullable: true)
            },
            constraints: table =>
            {
                table.PrimaryKey("PK_AspNetRoles", x => x.Id);
            });
    ...

如您所见,它们是相同的,为什么会这样?

不知为何visual studio为了mac又耍我了。以下行已添加到我的 csproj 文件中。

<Compile Remove="Migrations\MainDbContextModelSnapshot.cs" />
<Compile Remove="Migrations210102195131_Test1.Designer.cs" />
<Compile Remove="Migrations210102195131_Test1.cs" />

现在可以理解为什么它试图再次从头开始创建所有内容,因为没有快照。无论如何,如果这种奇怪的事情发生在其他任何人身上,您可能需要查看您的 csproj 文件。我无法解释为什么要添加这些。

解决方案是在您看到此类行时将其删除,一切都会按预期进行。