我正在使用實體框架代碼第一次使用遷移工作4.3。 在本地運行時,我的web.config被配置爲以數據庫初始化爲目標,該初始化實現了CreateDatabaseIfNotExists<DataContext>
,它爲我的開發數據庫提供了測試數據,同時也在第一次運行時填充了各種「靜態」可查找數據。使用實體框架遷移進行種子和分支項目
一旦開發數據庫已經被創建,對數據庫的任何後續修改都會添加到項目的遷移並使用'updata-database'PS命令更新數據庫。
當我對項目感到滿意時,我使用webdeploy部署代碼,但手動複製數據庫,因爲webdeploy不包含遷移表。部署時,我使用web.config轉換來設置實現MigrateDatabaseToLatestVersion<DataContext>
的新數據庫初始值設定項。然後這將應用之後部署的基於代碼的新遷移。 這一切都工作得很好,但我擔心這是不是用測試數據初始化我的數據庫,而是運行應用程序所需的數據的最佳方法。 我正在尋找的是創建初始種子數據而不必將其掛接到CreateDatabaseIfNotExists<DataContext>
而是將其掛接到遷移中的好方法。 我意識到在配置類上有一個種子方法,但看到它在每次遷移時都更新數據庫,這是不可取的解決方案。
該項目是在TFS中,我不時需要創建這個項目的一個新的分支,這是本質的第一個克隆。當第一次在本地運行這個數據庫時,數據庫還不存在,但會像前面解釋的那樣創建和播種。現在最大的問題是,以前通過遷移處理的模式更改現在將在首次創建數據庫時應用。如果我然後嘗試添加新的遷移文件並運行'update-database',我會遇到難題,因爲它無法運行先前的遷移,因爲在創建數據庫時已經應用了這些更改。我只能想象我在這裏做錯了什麼或者只是錯過了一個竅門。
總之我正在尋找關於創建使用遷移首次數據庫時,種子初始測試數據&所需的應用程序數據
- 最佳方式的信息。
- 分支包含代碼遷移項目並首次創建數據庫時克服問題的最佳方法。
感謝您的閱讀。
我知道所提到的種子的方法。我對使用它的擔心是它每次運行遷移時都會執行。 我的一些初步的核心數據會/可以通過應用程序時,它的運行變化,我不希望如果添加了新的遷移它復位。 如果你在配置類包裝的種子方法,因此只有執行的「InitialCreate」遷移我想這會工作,但我還沒有找到什麼好辦法做到這一點的一個好方法。 – Drauka 2012-04-19 10:22:14
這是你的責任,以確保調用'Seed'方法是可重複的 - 'AddOrUpdate'可以用它幫助。如果您無法確保將自定義種子SQL語句直接添加到遷移中的「Up」方法。 – 2012-04-19 11:02:26
我明白你在說什麼,但使用實體框架的諸多原因之一是爲了避免必須編寫相對複雜的SQL插入語句。而不是通過上下文播種。我正在尋找一種替代解決方案,並且會發布一次/如果檢查正在工作。 – Drauka 2012-04-19 11:16:01