【发布时间】:2016-02-25 20:02:58
【问题描述】:
实体框架 6
我正在尝试诊断在安装后同时启动的 2 个独立服务使用相同上下文时发生的竞争情况。
在这两种情况下,上下文都使用 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 文件夹。
它们是否默认启用?为什么会发生迁移?
【问题讨论】:
-
您是否确认它们未在您的 web.config 中打开?
-
没有 web.config。它们没有在 app.config 中打开。
标签: c# .net entity-framework entity-framework-6