C# 使用RIA服务批量查询DomainContext
我有一个简单的Silverlight网页,它使用RIA服务显示远程数据库中的dtaa。我有一个C# 使用RIA服务批量查询DomainContext,c#,wcf,silverlight,silverlight-4.0,wcf-ria-services,C#,Wcf,Silverlight,Silverlight 4.0,Wcf Ria Services,我有一个简单的Silverlight网页,它使用RIA服务显示远程数据库中的dtaa。我有一个DomainContext,我通过它对数据库进行查询 context.Load(context.GetSitesQuery()).Completed += new EventHandler(Query_Completed); 请注意,我正在等待查询完成。这里的问题是,我需要进行至少20个不同的查询,每个查询涉及不同的实体对象。在加载所有数据之前,应用程序实际上也做不了什么。所以,我只想知道所有查询何时
DomainContext
,我通过它对数据库进行查询
context.Load(context.GetSitesQuery()).Completed += new EventHandler(Query_Completed);
请注意,我正在等待查询完成。这里的问题是,我需要进行至少20个不同的查询,每个查询涉及不同的实体对象。在加载所有数据之前,应用程序实际上也做不了什么。所以,我只想知道所有查询何时完成。有没有一种简单的方法来创建一批查询
我自己尝试过,但由于每个查询都涉及不同的实体,因此遇到了一个问题。我创建了一个
EntityQuery
列表,我想我可以迭代它并执行所有查询,但是Load
方法要么抱怨参数错误,要么在运行时失败。通过跟踪挂起的加载操作的数量,我们已经完成了您想要做的事情。当它达到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();
}
使用System.ServiceModel.DomainServices.Client;
...
专用int_装载计数器;
私有领域文本_domainContext;
专用无效加载(EntityQuery查询,
操作(回调)
其中tenty:实体
{
开始加载();
操作内部回调=
loadOp=>{
回调(loadOP);
EndLoading();
};
_Load(查询,内部回调,空);
}
私有void开始加载()
{
_loadCounter++;
//您可以添加逻辑来指示应用程序正忙
}
私有void结束加载()
{
_装载计数器--;
如果(_loadCounter==0)
{
OnLoadComplete();
}
}
私有void OnLoadComplete()
{
//TODO所有内容都已加载
}
private void开始加载查询()
{
//在此处增加一次,以防止发生OnLoadComplete
//在所有查询开始之前
开始加载();
加载(_domainContext.GetSitesQuery(),查询已完成);
加载(_domainContext.GetOtherQuery(),OtherQuery_已完成);
EndLoading();
}
如何获取对tenty
的引用?(感谢添加C#标记)我使用语句添加了where tenty:Entity
和必需的。谢谢。这基本上就是我已经拥有的。我希望有更好的方法,但我想这没问题。