嘗試洗掉兩列并在我的一個模型中添加一個新列(洗掉和新建之間沒有關系),但生成的遷移會重命名已洗掉的列之一。由于洗掉的列在生產中保存資料,因此必須洗掉它們而不是重命名。
有沒有辦法解決這個問題,因此生成的遷移會洗掉并創建而不是重命名?
模型中的變數:
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
生成的遷移:
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "Info",
table: "Articles");
migrationBuilder.RenameColumn(
name: "Invites",
table: "Articles",
newName: "States");
}
uj5u.com熱心網友回復:
有時 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");
}
如果您想恢復遷移,請記住還要更改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");
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/313305.html
上一篇:如何更新資料庫?
