3

儘管代碼優先對於部署非常有用,但在開發過程中,我無法看到如何在代碼中推送對域模型所做的更改 - 進入生產後的第一種方式。在生產中使用代碼優先(ORM)對域模型進行更改

我們在生產過程中積累的數據如何處理?

我應該手動將數據從版本A架構遷移到版本B架構。我是否需要在模式中編寫代碼以防止發生重大更改?在初始部署之後,我是否先告別代碼優先,然後切換到數據庫優先?

我錯過了什麼?

+1

我想你需要Code First Migrations,它包含在4.3版本中,請參閱:http://blogs.msdn.com/b/adonet/archive/2011/11/29/code-first-migrations-beta- 1-released.aspx – Marthijn 2012-02-24 13:25:11

回答

2

首先是免責聲明,我對EF沒有太多經驗,我認爲它與nHibernate在這方面類似。我回答了類似的問題here。底線是EF和NHibernate只是一個ORM框架。他們對您的域名有深入的瞭解,但只有在其當前狀態,他們不知道歷史。 ORM可以生成數據庫模式,但此功能僅用於初始卷展欄和集成測試。您不能依賴它發展並需要升級(適用於模式和數據)的生產應用程序。

根據我的經驗,沒有用於編寫升級腳本的神奇工具,它們必須手動編寫或至少由開發人員審閱。工具可以爲您提供執行這些腳本的框架,如RoundhouseE。斯科特艾倫有一個excellent series關於「只進,一次運行」的方法。

+0

聽起來合乎邏輯,僅僅用於初始部署是我懷疑的事情。 – ndsc 2012-02-25 17:33:39

2

正如@Henkie在評論中所述,EF Data Migrations試圖解決您所描述的確切問題。

我現在有一個使用代碼優先的EF的應用程序,我們所做的是在邊EF上構建一個模式更新策略。我們有一張表格,它能夠理解數據庫當前的版本以及運行的SQL腳本的目錄(遷移數據,更改模式和增加版本表)。

鏈接:

  1. Code-Based

  2. Automatic

希望這有助於。

相關問題