如何使用Azure脱机同步使用参数拉取数据?

时间:2018-03-06 16:20:19

标签: azure-mobile-services

我有如下的架构,我想知道当我必须填充所有数据时,我是否可以通过CategoryId获取所有TaskCategoryMappings。我浏览了文档here,但我无法弄清楚如何做到这一点?所有示例都类似于基于UserId的this。但是userid也用于身份验证,在服务器端我已经处理好了只返回属于相关用户的映射,我希望在adition中按CategoryId过滤?

另一个SO示例也在这里使用userId Parameter Passing with Azure Get Service

public class TaskCategoryMapping : TableData
    {
        public string TaskId { get; set; }

        public string CategoryId { get; set; }

        public string UserId { get; set; }

    }

1 个答案:

答案 0 :(得分:1)

根据您的说明,我在我这边检查了这个问题,发现它可以按预期工作,您可以按照以下详细信息检查您的代码:

后端型号:

public class Tag : EntityData
{
    public string TagName { get; set; }
    public bool Status { get; set; }
}

public class Message : EntityData
{
    public string UserId { get; set; }
    public string Text { get; set; }
    public virtual Tag Tag { get; set; }
    [ForeignKey("Tag")]
    public string Tag_Id { get; set; }
}

GetAllMessage操作:

// GET tables/Message
public IQueryable<Message> GetAllMessage()
{
    return Query();
}

对于客户端,我只是调用在线表来检索消息实体,如下所示:

客户端模型:

public class Message
{
    public string Id { get; set; }
    public string UserId { get; set; }
    public string Text { get; set; }
    public string Tag_Id { get; set; }
}

var result=await mobileServiceClient.GetTable<Message>().Where(msg => msg.Tag_Id == "c3cd4cf8-7af0-4267-817e-f84c6f0e1733").ToListAsync();

对于离线表,拉动操作查询

await messageSyncTable.PullAsync($"messages_{userid}", messageSyncTable.Where(m => m.Tag_Id == "<Tag_Id>"));

使用fiddler,你会发现请求看起来像这样:

https://{your-app-name}.azurewebsites.net/tables/Message?$filter=Tag_Id eq 'c3cd4cf8-7af0-4267-817e-f84c6f0e1733'

enter image description here