我已经在我的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
我只想同步与登录用户匹配的数据,那么还有另一种方法可以实现这一目标吗?
答案 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。