添加新字段时出现 MobileServiceTableOperationError

MobileServiceTableOperationError When Adding New Field

我有一个基于离线待办事项列表示例的 Azure 移动服务项目:

http://azure.microsoft.com/en-us/documentation/articles/mobile-services-windows-store-dotnet-get-started-offline-data/

具有离线数据的示例应用程序按预期工作。问题是当我想用新字段修改 ToDoItem 时。如果我使用新字段(Windows 应用程序 TodoItem class 和 AzureMobileService 应用程序 TodoItem class)修改 ToDoItem class,如下所示:

[JsonProperty(PropertyName = "NewData")]
public byte[] NewData { get; set; } 

当我尝试添加新项目时:

await MobileService.SyncContext.PushAsync();

我收到错误:

A first chance exception of type 'Microsoft.WindowsAzure.MobileServices.Sync.MobileServicePushFailedException' occurred in mscorlib.dll

Additional information: Push operation has failed. See the PushResult for details.

然后PushResult出现这个错误:

{Microsoft.WindowsAzure.MobileServices.Sync.MobileServiceTableOperationError}

据我了解,Azure 移动服务支持动态架构,因此我应该不必手动更新数据库。

知道我做错了什么吗?

我正在使用 .NET 后端。

2015 年 1 月 31 日更新

如果我修改 MobileServiceInitializer 来自:

public class MobileServiceInitializer : DropCreateDatabaseIfModelChanges<MobileServiceContext>

至:

public class MobileServiceInitializer : ClearDatabaseSchemaIfModelChanges<MobileServiceContext>

它将正确更新数据库,但当然会清除我在 table 中的所有数据。知道为什么 DropCreateDatabaseIfModelChanges 会抛出错误吗?

这可能是因为 Azure 移动服务没有删除数据库的权限。在此处查看此博客:http://blogs.msdn.com/b/writingdata_services/archive/2014/03/28/mobile-services-net-backend-initializers-and-model-updates.aspx

博客列出了两个选项,如果这是您的问题:

  1. 删除现有表 - 它具有您正在谈论的所有问题

  2. 启用代码优先迁移 - 允许您保留数据。 Code First 迁移有点棘手,因此请为此做好准备,但这是解决您的问题的一种方法。上面的博客对此进行了一些介绍,但这是在 EF 中进行迁移的更深入的演示:https://msdn.microsoft.com/en-us/data/JJ591621.aspx