OData客户端不使用$ expand进行补液

时间:2011-03-23 02:03:29

标签: odata

我一直在使用OData一段时间,并发现它是设置我的服务器的绝佳工具。今天我遇到了一些我以前从未见过的东西,这绝对令我感到困惑。

我在客户端上使用.Expand在获取报表时请求报表的数据树。我在原型中使用了确切的查询,它完美地工作(即完全水合)。当我使用Fiddler发送查询时,响应数据包是完美的,包括我正在寻找的所有数据。

问题是客户端没有任何扩展属性已经被水化(服务引用与当前服务完全一致)。为了尝试找出正在发生的事情,我已经将范围缩小到一个单一的属性,但它仍然无效。

var report = (serviceContext.Reports.Expand("ReportAreas").Where(r=>r.ReportID==reportID)).SingleOrDefault();

给我报告,但ReportAreas包含0项。如果我再尝试:

serviceContext.LoadProperty(report,"ReportAreas");

然后ReportAreas包含20个左右的项目。

这让我非常疯狂,因为Expand正在为不同的对象树(不同的查询但功能代码相同)工作而没有任何问题。有没有人有关于如何解决这里究竟发生了什么的建议???

更新

今天关于这个的一些新信息可能比较糟糕,并向我建议OData客户端中的一个错误。我发现只有一部分Report对象在没有填充扩展属性的情况下返回。数据库中的大部分报告都非常好。即如果我请求扩展ReportAreas的所有报告(而不是精炼到单个reportID),则大约80-90%的ReportAreas的非零计数,其余为0。

当报告返回时没有填充任何属性(null或0 count),实际的属性对象正在实例化并且正在设置它们的属性(来自Reference.cs文件中用于服务引用的断点),因此,对于例如,属于ReportArea对象的ReportID,PropertyAreaID和History值在查询解析期间设置了16次,但ReportAreas列表在请求时的计数为0。当我使用_service.LoadProperty时,它返回16 ReportAreas。

在我看来,扩展查询中的引用不匹配,但它太一致而不是一个简单的问题。总是有效的报告和不能正常工作的报告。真的希望有人可以帮助我查明这一点,以便我可以继续进行一些有用的编码......

1 个答案:

答案 0 :(得分:0)

解决这个问题的方法(至少在我理解之前)是设置

serviceContext.MergeOption = MergeOption.OverwriteChanges;

我被告知,如果客户已经被跟踪,这与客户没有重新融合链接有关。如果我发现更多/更好地理解问题,我会更新这个答案。