2016-02-25 49 views
0

的EntityFramework 6DropCreateDatabaseIfModelChanges導致自動遷移,即使我沒有啓用他們

我試圖診斷是發生在2個獨立的服務,一個安裝使用相同的上下文後開始在同一時間賽跑條件。

在這兩種情況下,Context都在使用DropCreateDatabaseIfModelChanges初始值設定項。

當翻翻當比賽條件發生堆棧跟蹤,異常通過DbMigrator痕跡:

at System.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable`1 migrationStatements, DbTransaction existingTransaction) 
at System.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable`1 migrationStatements) 
at System.Data.Entity.Migrations.DbMigrator.ExecuteOperations(String migrationId, XDocument targetModel, IEnumerable`1 operations, IEnumerable`1 systemOperations, Boolean downgrading, Boolean auto) 
at System.Data.Entity.Migrations.DbMigrator.AutoMigrate(String migrationId, VersionedModel sourceModel, VersionedModel targetModel, Boolean downgrading) 
at System.Data.Entity.Migrations.DbMigrator.Upgrade(IEnumerable`1 pendingMigrations, String targetMigrationId, String lastMigrationId) 
at System.Data.Entity.Migrations.DbMigrator.UpdateInternal(String targetMigration) 
at System.Data.Entity.Migrations.DbMigrator.<>c__DisplayClassc.<Update>b__b() 
at System.Data.Entity.Migrations.DbMigrator.EnsureDatabaseExists(Action mustSucceedToKeepDatabase) 
at System.Data.Entity.Migrations.DbMigrator.Update(String targetMigration) 
at System.Data.Entity.Internal.DatabaseCreator.CreateDatabase(InternalContext internalContext, Func`3 createMigrator, ObjectContext objectContext) 
at System.Data.Entity.Internal.InternalContext.CreateDatabase(ObjectContext objectContext, DatabaseExistenceState existenceState) 
at System.Data.Entity.Database.Create(DatabaseExistenceState existenceState) 
at System.Data.Entity.DropCreateDatabaseIfModelChanges`1.InitializeDatabase(TContext context) 

我還沒有啓用自動遷移,而且沒有出現,他們在基礎啓用這些服務的項目(沒有Migrations文件夾,並且沒有代碼引用來啓用自動遷移)。是否有另一種方法來檢查它們是否已啓用?我知道他們正在發生,因爲上下文所引用的數據庫有一個__MigrationHistory文件夾。

它們是否默認啓用?爲什麼遷移發生?

+0

您是否驗證過它們未在您的web.config文件中打開? – Chad

+0

沒有web.config。它們沒有在app.config中打開。 – SmashCode

回答

0

首先刪除_MigrationHistory文件夾及其下的任何東西。另外檢查你的數據庫是否有_MigrationHistory表,刪除它。

驗證AutomaticMigrationEnabled標誌是否爲false。如果沒有設置AutomaticMigrationEnabled = false。你可以在配置類的構造函數中完成它。

internal sealed class Configuration : DbMigrationsConfiguration<YourContext> 
    { 
     public Configuration() 
     { 
      AutomaticMigrationsEnabled = false; 
     } 
    } 

將數據庫初始值設定爲空。

`Database.SetInitializer<MyDbContext>(null);` 

但請確保在實例化DbContext的任何對象之前執行此操作。因此可能將其設置爲Startup.cs/Global.asax等。或者簡單地將它放在Context類的靜態構造函數中。

static MyDbContext() { 
    Database.SetInitializer<MyDbContext>(null); 
} 
+0

不回答我的問題。我怎麼知道他們是否在線,以及他們是否爲什麼? – SmashCode

+0

如果你有_MigrationHistory文件夾和_MigrationHistory表,那麼它已開啓。沒有其他方式或命令知道這一點。也許你可以嘗試手動運行update-database命令。如果未啓用遷移,它將失敗。爲什麼?如果您不是開發代碼的唯一所有者,那麼您知道它可能會啓用。 – vendettamit

+0

桌子本身沒有任何財產讓你知道他們在上? – SmashCode

相關問題