Azure Mobile Service Sync与select子句不受支持?

时间:2017-09-04 08:15:16

标签: xamarin.forms azure-mobile-services

我已经在我的Xamarin Forms应用程序中进行了很长时间的同步操作,只有这几个星期它开始抛出异常,这让我觉得这可能是服务更改或更新中引入的内容? 在启动时,我使用以下命令将所有数据与m Azure Mobile Service同步:

await this.client.SyncContext.PushAsync();

if (signedInUser != Guid.Empty)
{
  await this.MyTable.PullAsync(
  "myWorkoutsOnly",
  this.MyTable.CreateQuery().Select(u => u.UserId == signedInUser));
}

正如我所说,我从未遇到过这段代码的问题。但现在,我得到了:

System.ArgumentException: Pull query with select clause is not supported

我只想同步与登录用户匹配的数据,那么还有另一种方法可以实现这一目标吗?

1 个答案:

答案 0 :(得分:2)

  

我只想同步与登录用户匹配的数据,那么还有另一种方法可以实现这一目标吗?

您可以利用以下代码达到以下目的:

var queryName = $"incsync_{UserId}";
var query = table.CreateQuery()
    .Where(u => u.UserId == signedInUser);
await table.PullAsync(queryName, query);

对于Select方法,您可以将特定属性检索到本地存储中,而不是在线表中的所有属性,如下所示:

var queryName = $"incsync:s:{typeof(T).Name}";
var query = table.CreateQuery()
    .Select(r => new { r.Text, r.Complete, r.UpdatedAt, r.Version });
await table.PullAsync(queryName, query);

有关详情,请参阅adrian hall关于Query Management的书。

<强>更新

正如Joagwa评论的那样,您可以更改服务器端代码并​​限制仅由登录用户检索的数据。有关详细信息,请参阅Data Projection and Queries > Per-User Data