簡體   English   中英

在實體框架核心中合並遷移

[英]Merge migrations in entity-framework-core

是否可以將所有遷移文件合並為一個?

我創建了初始遷移。

dotnet ef migrations add InitialMigration

來源

每當我有一些模型更改時,我都會創建新的遷移更新。

但是現在我有太多的遷移更新文件。 是否可以將所有遷移文件合並為一個?

當然刪除數據庫不是一種選擇,我必須保留數據!

EF 6.X 有一個選項IgnoreChanges 這非常適合您的場景。 但不幸的是,它不是 EF 核心中可用的功能。

但是有一個解決方法。

步驟 1:刪除 Migrations 文件夾中的所有遷移腳本。

第 2 步:在包管理器控制台中:運行

PM> Add-Migration InitialCreate

第 3 步:刪除Up()Down()方法代碼。 在執行此操作之前,請將這些方法保存在別處,因為我們將在步驟 5 中再次使用它們。

第 4 步:運行:

 PM> Update-Database

它會在__EFMigrationsHistory表中插入一條新記錄。

第 5 步:之后,從第 3 步保存在安全位置的內容填充上述遷移腳本(即.._InitialCreate )的Up()Down()方法。

就是這樣。 現在您只有 1 個遷移文件 :)

注意:帶有包管理器控制台 (PM) 的 EF 核心: 包管理器控制台

一種方法是物理刪除所有遷移文件並添加新文件。 如果您的遷移在“Migrations”文件夾中,您可以簡單地將其刪除,否則您也需要刪除您的“ModelSnapshot”文件。 我認為這種方法可以解決您的問題。

當您想合並除 N 個最后一次遷移之外的所有遷移時,協議就不一樣了:

  1. 一個接一個地還原 N 次上次遷移,每個遷移使用以下 2 個命令:
    • dotnet ef database update NameOfTheLastMigration
    • dotnet ef migrations remove
  2. 應用還原到數據庫:
    • dotnet ef database update
  3. 創建“合並”遷移:
    • dotnet ef migrations add NameOfTheMergeMigration

暫無
暫無

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

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