我也有类似的问题。假设您的初始迁移创建了一个名为“SampleTable”的表
public partial class InitialCreate : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "SampleTable",
columns: table => new
{
...
},
constraints: table =>
{
table.PrimaryKey("PK_SampleTable", x => x.Id);
});
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "SampleTable");
}
}
你想删除那张桌子。您可能需要遵循的步骤是
- 从dbcontext中删除模型。
- 运行命令
dotnet ef migrations add RemoveSampleTable
(或迁移的任何名称)。但它只会产生空迁移。
public partial class RemoveSampleTable : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
}
protected override void Down(MigrationBuilder migrationBuilder)
{
}
}
- 如果您通过执行类似的命令来应用迁移
dotnet ef database update
。它基本上什么都不做。所以这里的技巧是从早期迁移中复制 Up/Down 的内容并将其粘贴到相反的方法。
public partial class RemoveSampleTable : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "VesselBuildingProject");
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "SampleTable",
columns: table => new
{
...
},
constraints: table =>
{
table.PrimaryKey("PK_SampleTable", x => x.Id);
});
}
}
- 现在,如果您现在已经在您的数据库上尝试过迁移,您需要从__EFMigrationsHistory中删除该条目。
- 现在继续执行命令
dotnet ef database update
,看看魔法:P