在查询中检索但在OnLoadCompleted方法中不可用的Silverlight子数据

时间:2011-10-19 00:24:14

标签: silverlight linq relational

我有Silverlight 4 RIA服务应用程序,其中有一个Sprinkler类,它有一个子集合Depths。 Sprinkler和Depth是SQL数据库中的两个表,其中一个Sprinkler具有许多深度。

我从一个类调用查询,因此:

Context.GetRunsForSelectedSprinkler(currentSprinkler.CurrentSprinkler, OnLoadListCompleted, null);

和我在同一个类中访问查询结果的方法是:

private void OnLoadListCompleted(InvokeOperation<IEnumerable<Sprinkler>> invOp)
{

   IEnumerable<Sprinkler> testRuns = invOp.Value;

}

我在DomainService中的查询是

[Invoke]

public IEnumerable<Sprinkler> GetRunsForSelectedSprinkler(string selectedSprinkler)
{

//            this.ObjectContext.ContextOptions.LazyLoadingEnabled = true;

   var sprinklers = (this.ObjectContext.Sprinklers.Include("Depths").Where(c =>  c.Sprinkler1 == selectedSprinkler));

   return sprinklers;

}

我使用debug发现,在此查询GetRunsForSelectedSprinkler中,喷头中每个喷头的深度集合都已正确填充。但是,在接收此查询结果的OnLoadListCompleted方法中,尽管Sprinkler表中的喷洒器数据存在,但由查询填充的Depths子集合(由于Include(“Depths”))现在不存在和深度为空。不知何故,这个深度集合在返回过程中丢失了。

有谁知道如何解决这个问题?

我广泛使用Google,我认为查询是正确的,但我找不到任何有关未能返回子集合的信息。

我尝试在元数据中为深度集合添加[Include],但这没有效果。我也试过设置this.ObjectContext.ContextOptions.LazyLoadingEnabled = true; 而不是,但它没有效果。 查询正确执行但结果未正确返回到OnLoadListCompleted,并且它以某种方式丢失了相关的子数据。

1 个答案:

答案 0 :(得分:0)

如果一个人不断猜测正确的关键词,那么谷歌就能得到正确答案,我现在可以回答我自己的问题了。我按照这个页面上的建议:

http://silverlightguy.com/2010/07/23/trick-for-solving-wcf-ria-services-issue/

解决了我的问题,并且正确地返回了子集合。

这似乎是RIA服务中的一个已知问题,即使很难发现。我也找到了这个页面:

InvokeOperation entities become null

并尝试使我的查询而不是Invoke,但是在找到上述方法之前没有完成解决方法,所以不知道这是否有效。

我也发现这个页面提到了这个问题,但没有跟进它。

Silverlight 4 LoadOperation returns null

感谢上面发布的那些人。