C# DropCreateDatabaseIfModelChanges正在导致自动迁移,即使我没有';t使他们

C# DropCreateDatabaseIfModelChanges正在导致自动迁移,即使我没有';t使他们,c#,.net,entity-framework,entity-framework-6,C#,.net,Entity Framework,Entity Framework 6,实体框架6 我试图诊断一个竞态条件,当安装后同时启动的两个独立服务使用相同的上下文时会发生这种情况 在这两种情况下,上下文都使用DropCreateDatabaseIfModelChanges初始值设定项 当竞争条件发生时查看堆栈跟踪时,异常通过DbMigrator跟踪: at System.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable`1 migrationStatements, DbTransaction ex

实体框架6

我试图诊断一个竞态条件,当安装后同时启动的两个独立服务使用相同的上下文时会发生这种情况

在这两种情况下,上下文都使用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)
位于System.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable`1 migrationStatements,DbTransaction existingTransaction)
位于System.Data.Entity.Migrations.Dmbmigator.ExecuteStatements(IEnumerable`1 migrationStatements)
在System.Data.Entity.Migrations.Dbmigator.ExecuteOperations(字符串migrationId,XDocument targetModel,IEnumerable`1操作,IEnumerable`1系统操作,布尔降级,布尔自动)
位于System.Data.Entity.Migrations.DbMigrator.AutoMigrate(字符串migrationId、VersionedModel sourceModel、VersionedModel targetModel、布尔降级)
位于System.Data.Entity.Migrations.DbMigrator.Upgrade(IEnumerable`1 pendingMigrations,String targetMigrationId,String lastMigrationId)
位于System.Data.Entity.Migrations.Dbmigator.UpdateInternal(字符串targetMigration)
在System.Data.Entity.Migrations.DbMigrator.c__DisplayClassc.b__b()中
位于System.Data.Entity.Migrations.Dbmigator.EnsureDatabaseExists(操作必须成功才能访问数据库)
位于System.Data.Entity.Migrations.DbMigrator.Update(字符串targetMigration)
位于System.Data.Entity.Internal.DatabaseCreator.CreateDatabase(InternalContext InternalContext,Func`3 createMigrator,ObjectContext ObjectContext)
位于System.Data.Entity.Internal.InternalContext.CreateDatabase(ObjectContext ObjectContext,DatabaseExistenceEstate ExistenceEstate)
位于System.Data.Entity.Database.Create(DatabaseExistenceEstate)
位于System.Data.Entity.DropCreateDatabaseIfModelChanges`1.InitializeDatabase(TContext上下文)
我没有启用自动迁移,而且在服务的基础项目中似乎也没有启用自动迁移(没有migrations文件夹,也没有关于启用自动迁移的代码引用)。是否有其他方法检查它们是否已启用?我知道它们正在发生,因为上下文引用的数据库有一个u MigrationHistory文件夹


默认情况下是否启用它们?为什么要进行迁移?

首先删除
\u MigrationHistory
文件夹及其下的任何内容。还要检查您的数据库,如果它有
\u MigrationHistory
表,请删除它

验证AutomaticMigrationEnabled标志是否为false。如果未设置,则
AutomaticMigrationEnabled=false
。您可以在配置类构造函数中执行此操作

internal sealed class Configuration : DbMigrationsConfiguration<YourContext>
    {
        public Configuration()
        {
            AutomaticMigrationsEnabled = false;
        }
    }
内部密封类配置:dbmigtorinsconfiguration
{
公共配置()
{
AutomaticMiggerationsEnabled=假;
}
}
将数据库初始值设定项设置为null

`Database.SetInitializer<MyDbContext>(null);`
`Database.SetInitializer(null)`
但请确保在实例化DbContext的任何对象之前执行此操作。所以可能会在Startup.cs/Global.asax等网站中设置它。或者干脆把它放在上下文类的静态构造函数中

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

您是否验证了它们没有在web.config中打开?没有web.config。它们没有在app中打开。config没有回答我的问题。我如何判断它们是否打开以及为什么打开?如果您有_MigrationHistory文件夹和_MigrationHistory表,那么它就打开了。没有其他方法或命令知道这一点。可能您可以尝试手动运行更新数据库命令。如果未启用迁移,它将失败。为什么?如果您不是开发代码的唯一所有者,那么您知道它可能会被启用。表本身是否没有属性让您知道它们处于启用状态?EF不会查看表的数据,但会检查配置是否已启用,以及是否存在迁移事件以触发迁移。迁移过程使用迁移表中的数据。