簡體   English   中英

Entity Framework Core 2.1,使用代碼優先遷移重命名表而不刪除和創建新表

[英]Entity Framework Core 2.1, rename table using code-first migrations without dropping and creating new table

我將 .netcoreapp 2.1 與 EF Core 2.1 一起使用,並使用數據遷移更新我的數據庫,但在重命名表時遇到了問題。 我這里的主要問題是一個表(以及后來可能的列)可能會用數據重命名多次,我希望能夠重命名它們,同時保持這些數據完好無損,但從我讀過的內容來看,這些遷移似乎只關心保持架構是最新的。

此問題類似於使用 Entity Framework Core 2.0 在不丟失數據的情況下更改或重命名列名,但由於我的過程是自動化的,因此我需要能夠使用 do.net.exe 在命令行上使用遷移本身來執行此操作。

為此,我將下面的參數傳遞給 do.net.exe,構建解決方案,從 DLL 獲取數據庫上下文,然后使用下面的行運行遷移。

ef migrations add "someMigrationName"

...並更新數據庫

var migrator = dbContext.Database.GetService<IMigrator>();
migrator.Migrate();

例如,如果名為“Courases”的表開始收集數據,我需要能夠在不影響數據的情況下將其重命名為“Courses”,但是目前下面是遷移中生成的 Up function。

protected override void Up(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.DropTable(
            name: "Courases");

        migrationBuilder.CreateTable(
            name: "Courses",
            columns: table => new
            {
                Id = table.Column<Guid>(nullable: false),
                ConcurrencyCheck = table.Column<byte[]>(nullable: true)
            },
            constraints: table =>
            {
                table.PrimaryKey("PK_Courses", x => x.Id);
            });

    }

從我讀過的內容來看,似乎沒有辦法生成一個表重命名而不是刪除和重新創建的遷移,但這看起來很瘋狂,有沒有辦法做到這一點/是否有一個標志我可以傳遞給 do.net.exe我錯過了什么?

我在 EF Core 5.0 中使用dotnet ef migrations add命令遇到了同樣的問題。 它想刪除表並重新創建它們,這意味着我將丟失所有數據。

我試圖添加一個新表並重命名其中的一些。 它顯然不喜歡那樣,我把它分成 2 次遷移。 首先我添加了新表,然后我重命名了其他表。

只是想在 Entity Framework Core 中推廣 Rename a foreign key 而不會刪除數據作為這個問題的頂級答案——正如其他評論者指出的那樣,這是最好的答案,因為它讓 EF 自己正確地創建遷移。 不要被標題的措辭拖延:這個答案涵蓋了在 EF Core 中重命名實體及其基礎表,並且從 EF Core 7 開始仍然適用。

暫無
暫無

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

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