我创建了一个全新的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 context)+254
由于缺少依赖关系such as Json,我已经看到大量关于此异常发布的帖子。我不知道如何解决这个问题。我使用Visual Studio为Azure移动服务创建的基本模板。模型本身没有任何Json属性。我也不确定如何判断服务器上当前驻留的程序集。我没有看到任何实际连接和管理这些文件的方法(我想我不能,而不是在虚拟机上托管它。)。
数据库是在我设置移动服务时由Azure创建的,我可以使用" Try it Out"来插入和删除数据。页。我很困惑,为什么当没有任何实际改变时它会卡在这里。我正在进行基线迁移。
虽然这是默认设置,但我的迁移方式除外(按照上面链接的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>
.......
以下是我的配置类
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" }
// );
//
}
}
启用自动迁移后,我现在在运行时收到此错误。
不支持影响迁移历史记录系统表位置的自动迁移(例如默认架构更改)。请对基于代码的迁移使用影响迁移历史记录系统表位置的操作。
答案 0 :(得分:0)
也发生在我的案子上。整个项目正在开发其他PC。当我尝试复制并在新PC上运行时,我得到了同样的错误。我做了什么,删除所有未使用的引用并检查了与ConnectionString上的初始目录匹配的Web.config文件: