mat*_*esj 5 entity-framework .net-core
尝试在我的模型之一中删除两列并添加新列(删除和新建之间没有关系),但生成的迁移会重命名已删除的列之一。由于删除的列保存生产中的数据,因此必须删除它们而不是重命名它们。
有没有办法解决这个问题,以便生成的迁移删除并创建而不是重命名?
模型中的变量:
public DateTime? PublishedAt { get; private set; }
public bool? IsValidated { get; private set; }
public States? States { get; private set; } // Added
public Invites? Invites { get; private set; } // Removed
public string Info { get; private set; } // Removed
Run Code Online (Sandbox Code Playgroud)
生成的迁移:
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "Info",
table: "Articles");
migrationBuilder.RenameColumn(
name: "Invites",
table: "Articles",
newName: "States");
}
Run Code Online (Sandbox Code Playgroud)
有时,如果类型相同,EF 可能会认为您想要重命名列,而不是创建列。
这不是一门精确的科学,因此要么创建一个迁移来首先删除列,应用,然后创建另一个迁移来添加新列,以便 EF 将它们作为单独的操作进行处理,或者我只是手动更改迁移。
如果是后一个选项,请使用该MigrationBuilder.AddColumn方法添加States列 & 然后更改RenameColumn为DropColumn并删除Invites:
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "Info",
table: "Articles");
migrationBuilder.DropColumn(
name: "Invites",
table: "Articles");
migrationBuilder.AddColumn(
name: "States",
table: "Articles");
}
Run Code Online (Sandbox Code Playgroud)
如果您想恢复迁移,请记住还要更改方法,Down(MigrationBuilder migrationBuilder)以便它执行与更新Up(...)方法相反的操作,而不是旧方法:
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn(
name: "Info",
table: "Articles");
migrationBuilder.AddColumn(
name: "Invites",
table: "Articles");
migrationBuilder.DropColumn(
name: "States",
table: "Articles");
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3588 次 |
| 最近记录: |