我有一個MVC4應用程序,我最近升級到實體框架5,我試圖超過我們的移動數據庫使用遷移從開發風格的初始遷移和單一的種子刪除並創建每個運行。實體框架5遷移:建立數據庫
這是我在我的應用程序啓動功能中所做的。
protected void Application_Start()
{
Database.SetInitializer(
new MigrateDatabaseToLatestVersion< MyContext, Configuration >());
...
}
我跑我的庫項目Enable-Migrations
命令,我認爲這將創建一個初始遷移文件,但它創建的唯一文件是Configuration
當我刪除它創建它通過預期數據庫先編碼,然後從配置文件中播種數據庫。在配置文件中我改變了所有的Add()
功能AddOrUpdate()
但是它的網站啓動,並重復所有的種子數據一次又一次,每次運行種子功能在我Configuration
文件。
我想到的是,當我讀博客暗示,它將和我可以把在那裏的種子數據將創建一個initial migration
文件,但它並沒有
任何人都可以解釋我是如何應建立DB在代碼中,它只能種一次?
LINK: The migrations blog post I followed
雖然這是使用EF migrate.exe因爲我已經轉向使用roundhouse運行遷移挺有意思的。我仍然使用EF來支持基於模型的遷移,但是我編寫了一個控制檯應用程序來將遷移寫入SQL文件。然後我使用roundhouse通過我的rake構建腳本執行遷移。還有一點過程涉及到,但它比使用EF在應用程序啓動時即時執行遷移時更穩定。
我猜它每次都在運行,因爲那是他們唯一可以做到的,而實際上並不需要在實際遷移中實施種子的方法。如果你的種子代碼位於遷移的Up()內部,它只會運行一次,這對我來說更直觀,因爲通常你做了一些數據庫更改,並希望將一些數據種入模式的新部分 – FRoZeN
如果您沒有任何遷移,您的種子方法永遠不會使用此方法運行。我現在也更喜歡在遷移中進行播種 - 這種方式我知道它只會運行一次。 – oldwizard
嗨pcguru。實際上,您始終進行遷移,因爲初始數據庫被認爲是遷移,即從無數據庫遷移到擁有數據庫。但是我可以看到在移民中擁有種子的好處。 –