【发布时间】:2015-01-25 10:37:30
【问题描述】:
我正在尝试使用以下代码通过 .NET 客户端更新 Windows Azure 移动服务数据库中的一行:
List<TodoItem> myItemsList = await todoTable.Where(todoItem => todoItem.XID == 1).ToListAsync();
TodoItem myItem = myItemsList.First();
myItem.TITLE = "New Title";
await myClient.GetTable<TodoItem>().UpdateAsync(myItem);
XID 属性只是我自己添加的整数键,与所需的 guid 不同。问题是更新没有通过。需要注意的是:
- 当我调试它时,检索部分工作正常。在本地,TITLE 属性被正确设置为“新标题”,但是当 UpdateAsync 命令被执行并且我将鼠标悬停在“myItem”实例上时,我看到 TITLE 属性已恢复为原始值。
- 我在测试代码时损坏了 guid,UpdateAsync 按预期失败,因为我的表中没有使用该 guid 的记录。
- 我很确定这段代码以前可以正常工作,但现在不行了。
现在我正在运行 DeleteAsync 命令,然后运行 InsertAsync,这样就可以解决问题。但是我很困惑为什么 UpdateAsync 命令对我不起作用,以及为什么当它执行时它会用原始数据刷新“myItem”实例。
【问题讨论】:
-
如果您使用的是JS后端,您是否有任何用于服务器端更新操作的脚本?如果使用 .NET 后端,能否在控制器中发布 PatchTodoItem 操作的定义?
-
它是 .NET 后端。我没有接触太多代码——只是使用了标准的 ToDoItem 示例。这是 PatchToDoItem 操作:
public Task<TodoItem> PatchTodoItem(string id, Delta<TodoItem> patch) { return UpdateAsync(id, patch); } -
尝试调试 .NET 后端(通过在本地运行或通过在服务器资源管理器中选择服务将调试器附加到正在运行的实例)。是否将正确的值发送到后端?我还建议使用 Fiddler 之类的工具来查看发送的 HTTP 请求。
标签: c# azure azure-mobile-services