2017-07-07 190 views
0

我有一個使用實體框架數據庫優先風格開發的項目。我對各種Model文件進​​行了一些更改,現在每次在我的EDMX文件上執行「從數據庫更新模型」時,這些更改都會被清除。我看到有一個Refresh選項卡,它列出了我的模型文件,但是沒有辦法告訴VS不刷新這些文件。我應該在這裏做什麼?謝謝。如何在執行「從數據庫更新模型」時更新模型文件?

+0

請勿將更改直接寫入.edmx類。這些類是由ef生成的。生成的類定義爲部分,以便您可以在單獨的物理文件中定義自己的部分類以擴展生成的功能 – Fran

回答

1

請勿將更改直接寫入.edmx類。這些類是由ef生成的。生成的類定義爲partial,以便您可以在單獨的物理文件中定義自己的部分類以擴展生成的功能。

這裏有一個很好的例子

https://dotnetcodr.com/2015/02/18/extending-class-definitions-with-partial-classes-in-c-net/

它甚至在產生的.cs頂部聲明文件

//------------------------------------------------------------------------------ 
// <auto-generated> 
// This code was generated from a template. 
// 
// Manual changes to this file may cause unexpected behavior in your application. 
// Manual changes to this file will be overwritten if the code is regenerated. 
// </auto-generated> 
//------------------------------------------------------------------------------ 
+0

謝謝。該鏈接很有幫助。 –

-2

我覺得你的問題的最佳答案是: 開始學習實體框架Code-First

+0

他可能正在研究一個現有的代碼庫,它不允許這樣做。但我絕對同意這種看法。 – Fran

+0

如果您直接對數據庫進行更改(又名現有數據庫中的Code-First),Code-First不會解決此問題。 –

+0

我希望我能。首先給我一個工作數據庫。當我完成這個項目的工作時,我想我會在Code First做一個有趣的開始。它似乎更加靈活。 –

0

取決於你改變了什麼。如果您對edmx模型進行了更改,則每次重新生成模型時都會覆蓋它們。

如果您對所生成的poco-class進行了更改, Poco's是作爲部分類生成的。只需創建一個子文件夾,並使用相同的類簽名將您的poco擴展到單獨的文件中。

同樣適用於模型上下文類(yourModelName.Context.cs)。更改也應該在一個單獨的文件中完成。

也許你應該嘗試'Code First from database'。這會生成一個Fluent模型,更容易更改您的特定需求。儘管沒有模型的圖形表示。

0

就像你說的...它的DatabaseFirst ...所以你的模型文件將從數據庫更新(不是任何其他地方...不是你),你不應該這樣做......因爲每一個變化都將失去當你再次從數據庫更新你的模型! ...如果因爲某些原因(例如添加列或(...))而改變模型,則必須從數據庫中執行此操作,而不是在這裏執行操作!...但如果將其更改爲另一個原因,如添加驗證屬性或..你必須使用部分類!不要直接寫在你的模型文件中。