我正在關注官方的asp.net「使用MVC 4開始使用EF 5」。在該教程中,執行遷移時(在我的理解中)創建數據庫。當我使用Mvc 5教程查看EF 5時,他們沒有使用遷移來創建數據庫。他們使用數據庫初始化器。所以,我想知道如何在不使用EF 5中的遷移的情況下爲您的項目創建數據庫?另外,這兩種方法有什麼不同?你可以在EF5中創建一個沒有遷移的數據庫嗎?
1
A
回答
6
代碼優先遷移和使用軟件包管理器控制檯首先進行升級的命令可能會讓人有點困惑。 可以使用初始化器CreateDatabaseIfNotExists
,DropCreateIfModelChanges
,DropCreateDatabaseAlways
和MigrateDatabaseToLatestVersion
看到界面IDatabaseInitializer<TContext>.
CreateDatabaseIfNotExists // is the Default initializer.
所以這就是爲什麼它似乎EF只是做你的東西的時候。
所以答案是「是可以‘創建而不遷移數據庫’
但差異並不明顯,如果你要那麼做長期是另一個問題。 如果您正在使用的遷移。 如果沒有數據庫,那就意味着要創建數據庫 所以這就是爲什麼自動化遷移和CreateDB看起來很混亂,因爲它們有時會導致相同的結果,但從技術上講,它們是不同的。
所以一般來說是足夠的只能使用代碼第一次自動「遷移」。
遷移可以是自動或「管理」。 託管遷移方法調用生成代碼,調整代碼並運行PM commandlet或POwershell命令以實際執行遷移。
使用自動遷移,您只需設置intitializer並訪問DBContext。
這個過程有兩個部分。
a)DB初始化步驟。 在實例化YourDBContext之前執行此操作。使用遷移初始化時指定
//eg
// DONT TOUCH MY DB or i break your back!
Database.SetInitializer(new ContextInitializerNone<YourDbContext>()); // Do Nothing,
// OR
// yes migrate my db to match my code please.
Database.SetInitializer(new MigrateDatabaseToLatestVersion<YourDbContext, YourMigrationConfiguration>()); // Set to migration is requested, see config class below
的Confirguration類看起來像這樣
public class YourMigrationConfiguration<TContext> : DbMigrationsConfiguration<TContext>
where TContext : DbContext{
protected YourMigrationConfiguration() {
AutomaticMigrationsEnabled = true; // run it when needed. Do not wait for my PM Command
AutomaticMigrationDataLossAllowed = true; // if the new db look means dropping tables or columns go ahead and kill my data. So use this option with caution.
}
然後在需要時只觸發代碼的遷移。
Context.Database.Initialize(true); // i place this inside a method on my UoW class
Code first Db initialization strategies.
Code first migrations recommended reading
Managed Migrations
有關於這一主題在網絡上的文章。
相關問題
- 1. 我可以遷移到在Entity框架中沒有遷移的情況下創建的數據庫嗎?
- 2. 我可以從.sql創建初始CodeIgniter數據庫遷移嗎?
- 3. EF5代碼首先遷移 - 創建數據庫和遷移錯誤
- 4. 你可以爲你連接的同一個數據庫創建dblink嗎?
- 5. 你可以創建一個沒有值的會話變量嗎?
- 6. 你可以創建一個ITracingService嗎?
- 7. 在Laravel中,遷移文件可以創建多個表嗎?
- 8. EF5數據庫遷移:如何移動數據
- 9. 遷移到現有的數據庫中沒有匹配遷移
- 10. 是否可以從數據庫創建ruby-on-rails遷移?
- 11. 你可以在庫中有窗口創建代碼嗎?
- 12. 你可以使用MongoDB map/reduce來遷移數據嗎?
- 13. 我可以在MySQL數據庫遷移文件中生成一個Ruby數據庫遷移文件
- 14. 有沒有一種gem可以讓你根據模型的變化創建遷移?
- 15. EF5代碼第一次自動遷移到Azure數據庫
- 16. 在Laravel 4中爲現有數據庫創建遷移
- 17. 如何在EntityFramework 4.3中爲現有數據庫創建遷移?
- 18. 無法創建耙數據庫遷移
- 19. Yii2遷移不能創建數據庫
- 20. Laravel 5.2從遷移創建數據庫
- 21. javascript/jquery有一個你可以創建的事件模型嗎?
- 22. 我可以創建一個沒有括號的函數嗎?
- 23. 你可以在地圖中創建一個註解嗎?
- 24. 你可以在Android中創建一個.dat文件嗎
- 25. 你可以在C++程序中創建一個.java文件嗎?
- 26. 你可以在asp.net中創建一個批處理文件嗎?
- 27. 你可以根據範圍創建一個分組嗎?
- 28. 有沒有創建它的實例有一個類可以嗎?
- 29. 數據庫遷移後沒有變化
- 30. 將數據移動到剛創建一個在導軌遷移
感謝您的回覆。這幫助了我很多。 AutomaticMigrationEnabled設置爲true時有什麼區別?如果設置爲false,該怎麼辦?它有什麼不同? –
對您的模型進行更改並進行嘗試,測試這些功能是讓他們感覺舒適的最佳方式。添加一個非常快速的搜索會發現http://stackoverflow.com/questions/11806570/automaticmigrationsenabled-false-or-true –