EF Core 5 在迁移中创建了两次表
EF Core 5 creates tables twice in migrations
我已经创建了一个项目和一个迁移,但是在添加新的迁移时,迁移似乎并不关心以前的迁移,也就是说,迁移文件只是试图创建相同的 tables两次。
我创建了两个迁移,First
和 Second
。发生变化的是我将字符串 属性 添加到 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 文件。我无法解释为什么要添加这些。
解决方案是在您看到此类行时将其删除,一切都会按预期进行。
我已经创建了一个项目和一个迁移,但是在添加新的迁移时,迁移似乎并不关心以前的迁移,也就是说,迁移文件只是试图创建相同的 tables两次。
我创建了两个迁移,First
和 Second
。发生变化的是我将字符串 属性 添加到 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 文件。我无法解释为什么要添加这些。
解决方案是在您看到此类行时将其删除,一切都会按预期进行。