我有一个基于离线待办事项列表示例的Azure移动服务项目:
离线数据的示例应用程序正在按预期工作。问题是当我想用新字段修改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日更新
如果我从:
修改MobileServiceInitializerpublic class MobileServiceInitializer : DropCreateDatabaseIfModelChanges<MobileServiceContext>
为:
public class MobileServiceInitializer : ClearDatabaseSchemaIfModelChanges<MobileServiceContext>
它将正确更新数据库,但当然会清除表中的所有数据。知道为什么DropCreateDatabaseIfModelChanges会抛出错误吗?
答案 0 :(得分:1)
这可能是因为Azure移动服务没有删除数据库的权限。在此处查看此博客:http://blogs.msdn.com/b/writingdata_services/archive/2014/03/28/mobile-services-net-backend-initializers-and-model-updates.aspx
博客列出了两个选项,如果这是你的问题:
删除现有表格 - 其中包含您所讨论的所有问题
启用代码优先迁移 - 允许您保留数据。 Code First迁移有点棘手,所以要做好准备,但这是解决问题的一种方法。上面的博客对此有所了解,但这是在EF中进行迁移的更深入的演示:https://msdn.microsoft.com/en-us/data/JJ591621.aspx