添加新字段时的MobileServiceTableOperationError

时间:2015-01-27 11:49:27

标签: c# azure-mobile-services

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

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

离线数据的示例应用程序正在按预期工作。问题是当我想用新字段修改ToDoItem时。如果我使用新字段(Windows应用程序TodoItem类和AzureMobileService应用程序TodoItem类)修改ToDoItem类,并使用以下内容:

[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>

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

1 个答案:

答案 0 :(得分:1)

这可能是因为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