我试图了解如何在 Azure 移动应用中使用 TableController
。这是示例 TodoItemController
:
public class TodoItemController : TableController<TodoItem>
{
protected override void Initialize(HttpControllerContext controllerContext)
{
base.Initialize(controllerContext);
MobileServiceContext context = new MobileServiceContext();
DomainManager = new EntityDomainManager<TodoItem>(context, Request, Services);
}
// GET tables/TodoItem
public IQueryable<TodoItem> GetAllTodoItems()
{
return Query();
}
// GET tables/TodoItem/48D68C86-6EA6-4C25-AA33-223FC9A27959
public SingleResult<TodoItem> GetTodoItem(string id)
{
return Lookup(id);
}
// PATCH tables/TodoItem/48D68C86-6EA6-4C25-AA33-223FC9A27959
public Task<TodoItem> PatchTodoItem(string id, Delta<TodoItem> patch)
{
return UpdateAsync(id, patch);
}
// POST tables/TodoItem
public async Task<IHttpActionResult> PostTodoItem(TodoItem item)
{
TodoItem current = await InsertAsync(item);
return CreatedAtRoute("Tables", new { id = current.Id }, current);
}
// DELETE tables/TodoItem/48D68C86-6EA6-4C25-AA33-223FC9A27959
public Task DeleteTodoItem(string id)
{
return DeleteAsync(id);
}
}
- 理想情况下,我希望避免传递像
TodoItem
这样的整个模型,以减少传入/传出带宽并将客户端限制为仅他们应该关心的内容。如果我这样做,离线同步和客户端 SDK 会受到怎样的影响? TableController
是否适用于上面建议的简单 CRUD 操作?互联网上有任何复杂查询的示例吗?
最佳答案
移动应用程序 TableController 是基于 OData 的 CRUD 界面的基础。您将始终将整个模型(基于 EntityData 模型,因此它有四个附加字段 - version、createdAt、updatedAt 和业已删除)传输到客户端。但是,客户端可以使用 OData 搜索来获取一组特定的实体。有关 OData 的更多信息,请查看 http://www.odata.org/
在离线同步并为客户端使用移动应用 SDK 的特定情况下,客户端 SDK 将发出 GET 但将结果限制为上次更新时间(对于第一个请求,该时间将为零,因此将获取所有内容) 。然后它将推送来自客户端的更改。在某些情况下(版本不匹配),它必须进行冲突解决。查看其文档中的“离线同步如何工作”:https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-offline-data-sync-preview/
关于rest - 在 Azure 移动应用/服务中使用 TableController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33380856/