gpt4 book ai didi

entity-framework - 查询Azure移动应用程序TableController

转载 作者:行者123 更新时间:2023-12-02 07:49:47 25 4
gpt4 key购买 nike

我在项目中使用 Azure 移动应用和 TableController。到目前为止,开发进展相当顺利。我的一个表依赖相当多的业务逻辑才能将适当的实体返回给客户端。为了执行此业务逻辑,我需要从客户端获取一些参数(特别是日期范围)。

我知道我可以使用 APIController 返回数据,但这不会破坏 Xamarin 中 SyncTables 提供的实体同步吗?

我的 GetAll 当前逻辑是:

public IQueryable<WorkItemDTO> GetAllWorkItem()
{
//Return all the work items that the user owns or has been assigned as a resource.
var query = MappedDomainManager.QueryEntity().Where(x => x.OwnerId == UserProfileId || x.Resources.Where(r => r.AssignedResourceId == UserProfileId).Count() > 0);

return query.Project().To<WorkItemDTO>();
}

我想要的是能够以某种方式传递开始和结束日期,然后我可以使用它来构建我的 WorkItemDTO 对象列表。主要问题是,WorkItem 实体实际上可以生成多个 WorkItemDTO 对象,因为 WorkItem 可以设置为重复出现。例如,假设某个 WorkItem 每周重复一次,并且用户希望查看 1 个月的日历,则该单个 WorkItem 将生成 4 个单独的具体 WorkItemDTO 对象。

然后,当用户在客户端修改这些 WorkItemDTO 对象之一时,我希望它作为创建自己的 WorkItem 实体的补丁发送回来。

有谁知道如何让 TableController 接收参数?或者如何让 APIController 工作以使客户端同步不受影响?

如有任何帮助,我们将不胜感激。

谢谢

雅各布

最佳答案

在服务器上,您可以通过添加具有正确名称和类型的参数,轻松地将查询参数添加到表 Controller get 方法中。

例如,您可以添加一个 dateFilter 查询参数,如下所示:

public IQueryable<WorkItemDTO> GetAllWorkItem(string dateFilter)

这将通过传递 dateFilter=value 查询参数来调用。您可以在序列化中使用 ASP.NET Web API 支持的任何数据类型。 (请注意,如果您没有不带查询参数的 GetAll,则在执行不带此查询参数的 Get 操作时,您将收到 Http 405 Method Not allowed。)

在客户端,正如 @JacobJoz 所指出的,您只需使用方法 IMobileServiceTableQuery.WithParameters构造传递给 PullAsync 的查询。如果您对同一个表有多个增量同步查询,并且它们使用不同的参数值,则应确保将这些值包含在要拉取的 queryId 中。

也就是说,如果对于同一个同步表,您有一个查询参数为 foo=bar,另一个查询参数为 foo=baz,请确保使用两个不同的查询 ID,一个包含“bar”,另一个包含“baz” ”。否则,2 个增量同步可能会相互干扰,因为 queryId 用作保存该同步表的最后更新时间戳的键。请参阅How offline synchronization works .

不幸的是,困难的部分是将查询参数作为离线同步拉取的一部分传递。离线同步仅适用于表格 Controller ,仅供引用。

PullAsync 有一个重载的扩展方法,它接受参数字典,但不幸的是它需要字符串查询而不是 IMobileServiceTableQuery:

PullAsync(this IMobileServiceSyncTable table, string queryId, string query, IDictionary<string, string> parameters, CancellationToken cancellationToken)

(我已提交一个错误来修复此问题:Add a generic PullAsync overload that accepts query parameters)。

问题在于,没有简单的方法可以从 IMobileServiceTableQuery 转换为 OData 查询字符串,因为您需要访问内部 SDK 方法。 (我提交了另一个问题: Add extension method ToODataString for IMobileServiceTableQuery 。)

关于entity-framework - 查询Azure移动应用程序TableController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38319858/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com