11

實體框架代碼首先是一個開發新項目的好框架。但是如何擴展現有的數據庫呢?用實體框架更新數據庫模式代碼首先

例如,如果我只是想添加一個額外的屬性到現有的數據實體呢?有沒有「代碼優先」的方式來做到這一點,或者我將不得不使用SQL Server Management Studio或類似的工具手動添加數據庫列?

我到目前爲止發現的所有內容都是如何在模式更改時從頭開始重新生成整個數據庫,但我不想丟失數據。

如果我沒有弄錯,Ruby on Rails有一個工具可以生成反映新數據庫更改的SQL腳本。 EF Code First也有辦法做到這一點嗎?

+0

如果您有任何不希望丟失的大數據......我會說使用模式優先模型。這不是一種選擇嗎?除了dba不可用之外,您會從先使用代碼中獲得什麼好處?請賜教.... – 2013-11-14 17:31:43

+0

@sam yi:在寫這篇文章兩年後,我傾向於同意你的評論 - 儘管從開發者的角度來看,代碼優先的方法似乎仍然吸引人。簡單地將一個屬性添加到類中比操作SQL命令更簡單,並且之後生成更新我的EF類。 – 2013-11-15 16:22:59

回答

8

我目前正在使用EntityFramework.Migrations庫來解決演變數據庫模式的問題。它可以創建生成SQL腳本來更新模式的遷移類。

它目前仍處於測試階段,但我發現它很有用。不幸的是,你仍然應該生成數據遷移腳本。

你可以找到更多的信息here

7

不幸的是沒有。目前沒有辦法在EF代碼中先增加數據庫。 ADO.NET team described some approach他們正在研究,但這些工具尚未發佈。唯一的方法是使用數據庫或模型的第一種方法。這意味着您可以直接在數據庫中建模您的更改並繼續編碼,也可以使用EDMX模型和Database Generation Power Pack逐步構建您的數據庫。您仍然可以通過在EF 4.1中添加新的T4模板從EDMX生成DbContext,但是您將失去定義實體類(它們將由模板創建)的方式。

3

我正在處理類似的問題。

我使用EF模型的第一種方法。我使用由sql EF生成的數據庫項目。

基本上我有一個正常的數據庫項目,但表sql是由EF模型生成的SQL。

僅供參考數據庫項目能夠在現有數據庫上生成更改腳本而不會丟失所有數據。您可以設置一個數據庫項目來警告您,如果正在執行的更改對數據有害並且不會在這種情況下運行。

我還沒有完成我的解決方案(改變SsdlToSql10.tt,它使用它來生成sql,使它對數據庫項目更友好!)。

+0

感謝您的建議。當我需要部署新版本時,我正在使用Visual Studio數據庫架構比較工具來生成架構遷移。它工作正常,但更自動化的解決方案將受到歡迎。如果我有時間,我會看看數據庫項目,這聽起來很有趣。 – 2011-07-19 16:44:35

1

Visual Studio有一個工具架構比較。修改代碼後,您可以生成數據庫,然後使用模式比較來修改您的數據庫項目或其他數據庫

+1

感謝您的建議。這正是我現在正在做的。它的工作原理,但我正在尋找與EF更緊密結合的東西。 EF.Migrations實際上正是我所期待的 – 2012-03-20 06:44:22

相關問題