如何以及在何處調用Database.EnsureCreated和Database.Migrate?

asp.net asp.net-mvc entity-framework entity-framework-core

我有一個ASP.NET MVC 6應用程序,我需要調用Database.EnsureCreated和Database.Migrate方法。

但我應該在哪裡打電話給他們?

熱門答案

我認為這是一個重要問題,應該得到很好的解答!

什麼是Database.EnsureCreated?

context.Database.EnsureCreated()是新的EF核心方法,可確保上下文的數據庫存在。如果存在,則不採取任何措施。如果它不存在,則創建數據庫及其所有模式,並確保它與此上下文的模型兼容。

注意:此方法不使用遷移來創建數據庫。此外,以後無法使用遷移更新創建的數據庫。如果要定位關係數據庫並使用遷移,則可以使用DbContext.Database.Migrate()方法確保創建數據庫並應用所有遷移。

我們是如何使用EF 6做到的?

context.Database.EnsureCreated()等效於下面列出的EF 6的方法:

  1. 包管理器控制台:

    啟用 - 遷移-EnableAutomaticMigrations。添加遷移/更新的數據庫。

  2. 來自代碼:

    Database.SetInitializer CreateDatabaseIfNotExists

要么

使用DbMigrationsConfiguration並設置AutomaticMigrationsEnabled = true;

什麼是Database.Migrate?

將上下文的任何掛起的遷移應用於數據庫。如果數據庫尚不存在,將創建它。

我們是如何使用EF 6做到的?

context.Database.Migrate()等同於下面列出的EF 6的方法:

  1. 包管理器控制台:

    Update-Database -TargetMigration

  2. 使用自定義DbMigrationsConfiguration:

    AutomaticMigrationsEnabled = false;或者使用DbMigrator。

結論

如果您使用遷移,則有context.Database.Migrate() 。如果您不想遷移並只想要一個快速數據庫(通常用於測試),那麼請使用context.Database.EnsureCreated()/ EnsureDeleted()。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow