我有一个简单的Silverlight网页,它使用RIA服务从远程数据库显示dtaa。我有一个DomainContext
,我通过它在数据库上查询。
context.Load(context.GetSitesQuery()).Completed += new EventHandler(Query_Completed);
请注意,我正在侦听查询以完成。这里的问题是我需要创建至少20个不同的查询,每个查询涉及不同的实体对象。在加载所有数据之前,应用程序实际上无法做很多事情。所以,我真的只想知道所有查询何时完成。有没有简单的方法来创建一批查询?
我自己尝试了这个,但由于每个查询涉及不同的实体,我遇到了问题。我创建了一个EntityQuery<Entity>
列表,并认为我可以迭代它并执行所有查询,但Load
方法要么抱怨错误的参数,要么在运行时失败。
答案 0 :(得分:0)
我们通过跟踪待处理的加载操作数量来完成您的意思。当它达到0时,你就完成了。
using System.ServiceModel.DomainServices.Client;
...
private int _loadCounter;
private TheDomainContext _domainContext;
private void Load<TEntity>(EntityQuery<TEntity> query,
Action<LoadOperation<TEntity>> callback)
where TEntity : Entity
{
BeginLoading();
Action<LoadOperation<TEntity>> internalCallback =
loadOp => {
callback(loadOP);
EndLoading();
};
_domainContext.Load(query, internalCallback , null);
}
private void BeginLoading()
{
_loadCounter++;
// You could add logic to indicate the app is busy
}
private void EndLoading()
{
_loadCounter--;
if (_loadCounter == 0)
{
OnLoadComplete();
}
}
private void OnLoadComplete()
{
// TODO Everything is loaded
}
private void BeginLoadingTheQueries()
{
// Increment once here to prevent the OnLoadComplete from occurring
// before all queries have started
BeginLoading();
Load(_domainContext.GetSitesQuery(), Query_Completed);
Load(_domainContext.GetOtherQuery(), OtherQuery_Completed);
EndLoading();
}