使用RIA服务批量查询DomainContext

时间:2012-03-21 13:18:59

标签: c# wcf silverlight silverlight-4.0 wcf-ria-services

我有一个简单的Silverlight网页,它使用RIA服务从远程数据库显示dtaa。我有一个DomainContext,我通过它在数据库上查询。

context.Load(context.GetSitesQuery()).Completed += new EventHandler(Query_Completed);

请注意,我正在侦听查询以完成。这里的问题是我需要创建至少20个不同的查询,每个查询涉及不同的实体对象。在加载所有数据之前,应用程序实际上无法做很多事情。所以,我真的只想知道所有查询何时完成。有没有简单的方法来创建一批查询?

我自己尝试了这个,但由于每个查询涉及不同的实体,我遇到了问题。我创建了一个EntityQuery<Entity>列表,并认为我可以迭代它并执行所有查询,但Load方法要么抱怨错误的参数,要么在运行时失败。

1 个答案:

答案 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();
}