代码之家  ›  专栏  ›  技术社区  ›  Emil

如何使用Azure Offline Sync提取带参数的数据?

  •  0
  • Emil  · 技术社区  · 7 年前

    我有下面的模式,我想知道当我必须提取所有数据时,是否可以按CategoryId获取所有TaskCategoryMappings。我查看了文件 here 但我不知道怎么做?所有示例如下 this 一个基于用户ID。但是userid也用于身份验证,在服务器端,我已经很好地处理了,只返回属于相关用户的映射,我希望通过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 回复  |  直到 7 年前
        1
  •  1
  •   Bruce Chen    7 年前

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

    后端型号:

    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();
    

    对于脱机表,pull操作查询将

    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