获取App_Start Code First迁移以使用Miniprofiler

时间:2012-07-29 12:07:08

标签: ef-code-first entity-framework-4.3 ef-migrations

我正在运行代码首次迁移。 (EF 4.3.1)

我也在运行Miniprofiler。

我首先通过App_Start上的代码运行我的代码。

我的代码如下所示:

public static int IsMigrating = 0;
    private static void UpdateDatabase()
    {
        try
        {
            if (0 == System.Threading.Interlocked.Exchange(ref IsMigrating, 1))
            {
                try
                {
                    // Automatically migrate database to catch up.
                    Elmah.ErrorLog.GetDefault(null).Log(new Elmah.Error(new Exception("Checking db for pending migrations.")));
                    var dbMigrator = new DbMigrator(new Ninja.Data.Migrations.Configuration());
                    var pendingMigrations = string.Join(", ", dbMigrator.GetPendingMigrations().ToArray());
                    Elmah.ErrorLog.GetDefault(null).Log(new Elmah.Error(new Exception("The database needs these code updates: " + pendingMigrations)));
                    dbMigrator.Update();
                    Elmah.ErrorLog.GetDefault(null).Log(new Elmah.Error(new Exception("Done upgrading database.")));
                }
                finally
                {
                    System.Threading.Interlocked.Exchange(ref IsMigrating, 0);
                }
            }
        }
        catch (System.Data.Entity.Migrations.Infrastructure.AutomaticDataLossException ex)
        {
            Elmah.ErrorLog.GetDefault(null).Log(new Elmah.Error(ex));
        }
        catch (Exception ex)
        {
            Elmah.ErrorLog.GetDefault(null).Log(new Elmah.Error(ex));
        }
    }

问题是我的DbUpdate即将被调用,然后我的应用程序抛出一个异常,我认为该异常来自第一个网页请求的应用程序。

话说:

  

无法更新数据库以匹配当前模型,因为存在挂起的更改并且已禁用自动迁移。将挂起的模型更改写入基于代码的迁移或启用自动迁移。将DbMigrationsConfiguration.AutomaticMigrationsEnabled设置为true以启用自动迁移。

问题是我认为我的主页在我的dbupdate完成之前触发了dbcontext并出现此错误

你会如何解决这个问题?

我是否应该使用锁等进行上下文等待,还是有更简单的方法?

更有趣的是,如果我启动和停止应用程序几次数据库更改被推送并且错误消失...

所以我需要找到一种方法在App_Start上向数据库发出第一个请求,等待迁移发生。

思想?

0 个答案:

没有答案