C#Silverlight RIA服务 - Context.Load()不支持加载多个查询?

时间:2009-09-23 10:43:18

标签: c# silverlight wcf-ria-services

情景

目前我有一个c#silverlight业务应用程序。该应用程序托管在Asp.net中,使用ADO.Net实体框架和域服务类来读取/写入我的sql server数据库。

设置

客户端用户界面

在我的silverlight客户端界面中,我有一个自动完成框,它使用查询来获取与搜索相关的项目列表。该查询位于我的域服务类中,如下所示:

public IQueryable<Status> GetStatus()
        {
            var q = (from job in Context.Job
                     select job.Status).Distinct()
                    .Select(deliveryState => new Status
                    {
                        DeliveryState = deliveryState,
                        Count = Context.Job.Count
                            (job => job.Status.Trim() == deliveryState.Trim())
                    });
            q = q.Where(job => job.DeliveryState != null);
            return q;
        }

代码背后

然后在我的代码后面的silverlight客户端界面xaml页面中,我使用以下代码在构造函数中加载查询:

var context = dds.DomainContext as InmZenDomainContext;
            statusFilterBox.ItemsSource = context.Status;
            context.Load(context.GetStatusQuery(), (lo) =>
            {
                //just to show you how to load..  
                //new  ErrorWindow("Loaded.." + lo.Entities.Count()).Show(); 
            }, null);

问题

我遇到的问题是,如果我向客户端界面添加另一个自动完成框,以及另一个Get查询执行不同类型的搜索,会发生什么:

public IQueryable<ShortCode> GetShortCode()
        {
            var q = (from job in Context.Job
                     select job.ShortCode).Distinct()
                    .Select(name => new ShortCode
                    {
                        Name = name,
                        Count = Context.Job.Count
                            (job => job.ShortCode.Trim() == name.Trim())
                    });
            q = q.Where(job => job.Name != null);
            return q;
        }

由于“Context.Load()”函数不支持加载多个查询,因此出现了该问题。此外,如果我尝试声明分隔“Context.Load()” - 只有其中一个工作........

我怎样才能解决这个问题!?!

2 个答案:

答案 0 :(得分:1)

这是对你问题的间接回答,所以接受或离开它。

我在一个屏幕上有多个AutoCompleteBox,但我没有使用DDS。很久以前,当我遇到问题时,我放弃了DDS。我不喜欢dds的主要问题是视图中有如此多的逻辑。

我所做的是将ACB直接绑定到实体并使用自定义过滤器进行复杂搜索。它搜索的列表是我使用get命令填充的实体列表

public EntityList<Person> Person
        {
            get { return _DomainContext.Persons; }
        }

我可以详细介绍一下,但是如果你使用DDS,那么我会把它留在那里。

答案 1 :(得分:0)

每个负载有一个实体类型,但同时运行多个负载应该没有任何问题。你是否安装了Fiddler来观察实际穿过电线的情况?