實體框架核心數據庫 - 初始Scaffold後的第一次更新?

ef-database-first entity-framework entity-framework-core

我正在使用Entity Framework Core,我一直致力於實現Database-First應用程序。最初的Scaffold-DbContext命令可以正常工作,如果沒有按照我的意願組織,則可以正確創建我的所有實體。它是一個SQL Server數據庫,它使用模式來分解責任區域,我並不真正關心Scaffold將它們全部放入一個文件夾這一事實。

除此之外,我無法確定在數據庫更新發生後是否有辦法重新運行Scaffold來更新類。我能找到的最接近的是使用-force參數重新運行Scaffold-DbContext命令。但是,這也會覆蓋我添加到Context.cs文件中的任何自定義代碼,例如將連接字符串指向配置值而不是硬編碼。

我看了幾個與此類似的其他問題,但它只討論了最初的腳手架,而不是進一步的更新。

有沒有辦法手動編碼任何未來的變化來做到這一點?如果沒有它,它似乎使數據庫優先的方法完全沒有EF Core的價值。

一般承認的答案

就像你自己說的那樣......數據庫第一種方法的主要問題是:你不應該手動更改模型並開始重命名等等。除非你100%確定你的數據庫不再改變。如果您不是100%確定,只需使用已自動生成的模型進行編碼。

Re-Scaffolding將覆蓋模型類中直接進行的任何更改,刪除所有已更改或添加的內容。

但是您可以在不會被自動映射覆蓋的一側進行部分類:

public partial class TableName
{
    public string Name_of_a_property
    {get; set;}
}

這是向您的實體添加代碼的一個很好的小方法,同時確保它不會被自動映射觸及。只需確保部分視圖與自動生成的類具有相同的名稱,一切都應該沒問題。


熱門答案

Antoine Pelletier回答的,可重新運行的腳手架可用於真正的DB First方法。

然而更多的時候支架使用一次的模式,你的代碼的初始導入,然後用代碼優先的方法繼續。使用逆向工程創建基於https://docs.microsoft.com/en-us/ef/core/get-started/aspnetcore/existing-db中描述的現有數據庫的實體框架模型的過程



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow