【发布时间】:2021-04-22 04:43:32
【问题描述】:
我已经创建了一个项目和一个迁移,但似乎迁移在添加新迁移时并不关心以前的迁移,也就是说,迁移文件只是尝试创建相同的表两次。
我创建了两个迁移,First 和 Second。改变的是我向Post 实体添加了一个字符串属性(此处未显示)。我的预期是这样的:
migrationBuilder.AddColumn(...)
但是我得到了一个Second 迁移,其中包含来自First 迁移的所有内容,但是在创建表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);
});
...
如您所见,它们是相同的,为什么会这样?
【问题讨论】:
-
嗯 - 在生成第二个之前,您是否应用
Firstmigraton 到您的数据库? -
@marc_s 是的,我做到了,获取迁移列表将第二个显示为(待定)。但为什么需要这样做?对我来说,它可以弄清楚自上次迁移以来发生了什么变化,而不是实际数据库中的变化。
-
@marc_s 我发现了问题,超级奇怪,但事后看来,为什么一切都表现得如此奇怪是有道理的。
标签: c# entity-framework-core entity-framework-core-5