无法更新数据库以匹配当前模型

问题描述 投票:0回答:1

我创建了一个全新的Azure移动服务项目,并发布到Azure上新创建的服务。然后我将项目发布到Azure并验证我可以发布/获取它。

接下来,我通过nuget管理器控制台启用了迁移,遵循guide i found online online和我found on MSDN来设置数据迁移。我完成了这些步骤,添加了我的初始迁移并将其重新发布到Azure。我没有对我的模特做任何改动。我在第一次发布后做的唯一工作就是启用迁移,添加迁移点然后重新发布。

现在登陆页面无法加载,我收到以下消息:

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

[AutomaticMigrationsDisabledException:无法更新数据库以匹配当前模型,因为存在挂起的更改并且已禁用自动迁移。将挂起的模型更改写入基于代码的迁移或启用自动迁移。将DbMigrationsConfiguration.AutomaticMigrationsEnabled设置为true以启用自动迁移。] System.Data.Entity.Migrations.DbMigrator.Upgrade(IEnumerable`1 pendingMigrations,String targetMigrationId,String lastMigrationId)+579 System.Data.Entity.Migrations.DbMigrator.UpdateInternal(String targetMigration)+446 System.Data.Entity.Migrations。<> c__DisplayClassc.b__b()+ 13 System.Data.Entity.Migrations.DbMigrator.EnsureDatabaseExists(Action mustSucceedToKeepDatabase)+422 System.Data.Entity.Migrations.DbMigrator.Update( String targetMigration)+78 LifestreamApi.WebApiConfig.Register()+158 LifestreamApi.WebApiApplication.Application_Start()+10

[HttpException(0x80004005):无法更新数据库以匹配当前模型,因为存在挂起的更改并且已禁用自动迁移。将挂起的模型更改写入基于代码的迁移或启用自动迁移。将DbMigrationsConfiguration.AutomaticMigrationsEnabled设置为true以启用自动迁移。] System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext context,HttpApplication app)+9916673 System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext,HttpContext context,MethodInfo [] handlers)+118 System .Web.HttpApplication.InitSpecial(HttpApplicationState状态,MethodInfo []处理程序,IntPtr appContext,HttpContext上下文)+172 System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext,HttpContext context)+336 System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext)+296

[HttpException(0x80004005):无法更新数据库以匹配当前模型,因为存在挂起的更改并且已禁用自动迁移。将挂起的模型更改写入基于代码的迁移或启用自动迁移。将DbMigrationsConfiguration.AutomaticMigrationsEnabled设置为true以启用自动迁移。] System.Web.HttpRuntime.FirstRequestInit(HttpContext context)+9930568 System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context)+101 System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr,HttpContext上下文)+254

由于缺少依赖关系such as Json,我已经看到大量关于此异常的帖子。我不知道如何解决这个问题。我正在使用Visual Studio为Azure移动服务创建的基本模板。模型本身没有任何Json属性。我也不知道如何判断服务器上当前驻留的程序集。我没有看到任何实际连接和管理这些文件的方法(我假设我不能,不能没有在VM上托管它。)。

当我设置移动服务时,Azure创建了数据库,我可以使用“试用”页面插入和删除数据。我很困惑,为什么当没有任何实际改变时它被卡在这里。我只是在进行基线迁移。

虽然这是默认设置,但我的迁移方式除外(按照上面链接的MSDN文章),我提供了我的WebApiConfig供您查看。

public static class WebApiConfig
{
    public static void Register()
    {
        AppServiceExtensionConfig.Initialize();

        // Use this class to set configuration options for your mobile service
        ConfigOptions options = new ConfigOptions();

        // Use this class to set WebAPI configuration options
        HttpConfiguration config = ServiceConfig.Initialize(new ConfigBuilder(options));

        // To display errors in the browser during development, uncomment the following
        // line. Comment it out again when you deploy your service for production use.
        config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;

        //Database.SetInitializer(new MobileServiceInitializer());
        var migrator = new DbMigrator(new Configuration());
        migrator.Update();
    }
}

public class MobileServiceInitializer : DropCreateDatabaseIfModelChanges<MobileServiceContext>
{
    public override void InitializeDatabase(MobileServiceContext context)
    {
        base.InitializeDatabase(context);
    }
}

由于我看到这种情况发生的很多原因都是缺少json程序集,所以我仔细检查了我的packages.config和我的web.config并验证了包的定义。

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:bcl="urn:schemas-microsoft-com:bcl">
    <dependentAssembly>
      <assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" culture="neutral" />
      <bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
    </dependentAssembly>
    <dependentAssembly>
      <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
      <bindingRedirect oldVersion="6.0.6.0" newVersion="6.0.6.0" />
    </dependentAssembly>
.......

Updated

以下是我的Configuration类

using System;
using System.Data.Entity;
using System.Data.Entity.Migrations;
using System.Linq;

internal sealed class Configuration : DbMigrationsConfiguration<LifestreamApi.Models.MobileServiceContext>
{
    public Configuration()
    {
        AutomaticMigrationsEnabled = false;
    }

    protected override void Seed(LifestreamApi.Models.MobileServiceContext context)
    {
        //  This method will be called after migrating to the latest version.

        //  You can use the DbSet<T>.AddOrUpdate() helper extension method 
        //  to avoid creating duplicate seed data. E.g.
        //
        //    context.People.AddOrUpdate(
        //      p => p.FullName,
        //      new Person { FullName = "Andrew Peters" },
        //      new Person { FullName = "Brice Lambson" },
        //      new Person { FullName = "Rowan Miller" }
        //    );
        //
    }
}

Update 2

启用自动迁移后,我现在在运行时收到此错误。

不支持影响迁移历史记录系统表位置的自动迁移(例如默认架构更改)。请对基于代码的迁移使用影响迁移历史记录系统表位置的操作。

azure entity-framework-6 azure-mobile-services ef-migrations
1个回答
0
投票

它也发生在我的案子上。整个项目正在开发其他PC。当我尝试复制并在新PC上运行时,我得到了同样的错误。我做了什么,删除所有未使用的引用并检查与ConnectionString上的初始目录匹配的Web.config文件:

RemoveUnusedReferences

© www.soinside.com 2019 - 2024. All rights reserved.