手動編輯EF7遷移類和快照


EF7 migration add命令(迄今為止,beta5)將DbContext中定義的模型類與當前模型快照進行比較,創建新的遷移類,並更新模型快照。

我需要修改遷移,使其生成不同的DDL SQL。例如,EF7使用序列進行SQL Server自動增量值,我希望它使用標識。然而,這可能是任何其他原因。 migration remove命令將物理刪除遷移文件並還原模型快照,因此在這種情況下它是無用的。

有3個文件包含看起來需要編輯的相關代碼:

  1. 主要遷移類:應該修改UpDown方法。
  2. DbContextModelSnapshot文件包含需要修改的註釋
  3. 輔助遷移部分類:名稱[migration].Designer.cs文件還包含遷移的模型快照。我假設這個快照需要匹配第2項中的模型快照,但我不確定。關於它的目的,我唯一的信息來自Brice的博客 ,該博客說:“如果您或提供商需要在遷移過程中檢查模型以獲取更多信息,那麼就是這樣。”

具體問題:

  1. 兩個模型快照是否需要保持同步才能正確執行遷移?
  2. 修改3個單獨的文件是編輯遷移的唯一方法嗎? (雖然取決於更改,但在某些情況下可能不必觸摸模型快照。)
  3. 是否有一些EF命令只能重新生成模型快照,而不能重新生成遷移方法?

一般承認的答案

具體答案:

  1. 兩個模型快照是否需要保持同步才能正確執行遷移?
    不,遷移中的快照是提供者編寫者的最後手段 。例如,SQLite無法重命名列,因此可以使用遷移的模型快照為此操作執行表重建 。 99%的時間,它永遠不會被使用。

  2. 修改3個單獨的文件是編輯遷移的唯一方法嗎?
    大多數情況下,您應該只編輯主遷移文件。在極少數情況下,如果您在團隊環境中工作並且遇到合併衝突,則可能需要編輯模型快照。您可以忽略設計器文件;它只是捕獲有關遷移的一些元數據。

    如果正確配置模型,則可能無需編輯任何內容。例如,要使用identity而不是sequence,請重寫DbContext.OnModelCreating()並添加modelBuilder.ForSqlServer().UseIdentity()

  3. 是否有一些EF命令只能重新生成模型快照,而不能重新生成遷移方法?
    不,它不應該被需要,因為你幾乎從不編輯這些文件。





許可下: CC-BY-SA
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因