簡體   English   中英

使用Code First重命名EF中的列

[英]Rename a column in EF with Code First

我在班上改名了。 看起來像這樣。

public class clsClassForStackoverflow
{
   [Column(TypeName = "varchar"), StringLength(150)]
   public string Name { get; set; }

由於結構上的更改,我不得不將其重命名。 因此,我刪除了該行並添加了新屬性。 之后,我創建了一個新的遷移文件來准備數據庫更新,他想在該文件中刪除舊列並添加新列。 好吧,因為數據庫中仍然有數據,所以將其更改為重命名。 一滴一滴,它將消失。

新的遷移文件:

public partial class _100126_2 : DbMigration
{
    public override void Up()
    {
        RenameColumn("dbo.tbClassForStackoverflow", "ClassForStackoverflow_Name",   "ClassForStackoverflow_NewName");
    }

    public override void Down()
    {
        RenameColumn("dbo.tbClassForStackoverflow", "ClassForStackoverflow_NewName", "ClassForStackoverflow_Name");
    }
}

啟動數據庫更新后,我查看了我的課程,並且屬性沒有改變。 它仍然命名為“名稱”,而不是“ NewName”。 在沒有讓EF認為自己刪除並添加一列的情況下,我該如何更改?

您需要按以下順序進行更改:

  1. 將您實體中的Name屬性重命名為NewName
  2. 向您的項目添加新的遷移
  3. 更改遷移以進行重命名,而不是Drop / Create, 僅更改Up / Down方法的內容
  4. 編譯並運行遷移

這是我已經多次完成此操作的方式。 重要的是在創建遷移時不要觸摸與遷移關聯的模型快照。

PS:如果我沒記錯的話,如果滿足某些(對我來說未知)約束,EF甚至可以檢測到重命名,因為我認為在進行簡單的屬性/列重命名時,甚至不必總是更改遷移。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM