【问题标题】:OData client not rehydrating using $expandOData 客户端不使用 $expand 补水
【发布时间】:2011-03-23 02:03:29
【问题描述】:

我使用 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 客户端中的一个错误。我发现只有报告对象的一个​​子集返回而没有填充扩展属性。数据库中的大多数报告都非常好。即,如果我请求扩展 ReportAreas 的所有报告(而不是细化为单个 reportID),则大约 80-90% 的 ReportAreas 具有非零计数,其余为 0。

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

在我看来,Expand 查询中的引用不匹配,但它过于一致,不是一个简单的问题。有效的报告总是有效,无效的报告永远无效。真的希望有人能帮我查明这一点,以便我可以继续进行一些有用的编码......

【问题讨论】:

  • 你能试试 Fiddler 看看什么查询(URL)被发送到服务器,响应是否包含扩展数据。
  • 根据第 2 段“当我使用 Fiddler 发送查询时,响应包是完美的(即包含所有扩展数据)”
  • 我知道当您从 Fiddler 手动发送请求时,它可以工作。我在问你是否可以使用 Fiddler 查看客户端应用程序发送的请求,尤其是请求的 URL 和响应。
  • 啊……现在没时间检查。明天早上我会第一件事。
  • 好的,因为我怀疑请求和响应似乎是完美的。唯一没有发生的是对象作为对象图的一部分出现。我可以使用 service.Property( , ) 填充每个属性,但这需要大约 30 秒。

标签: odata


【解决方案1】:

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

serviceContext.MergeOption = MergeOption.OverwriteChanges;

有人告诉我,这与客户在链接已被跟踪时不为链接补水有关。如果我发现更多/更好地理解问题,我会更新这个答案。

【讨论】:

  • 请参阅msdn.microsoft.com/en-us/library/gg602811(v=vs.103).aspx "默认情况下,客户端仅将响应提要中的条目具体化为尚未被 DataServiceContext 跟踪的实体的对象。这意味着对已在缓存不会被覆盖。此行为是通过为查询和加载操作指定 MergeOption 值来控制的。"
  • 这与最初的问题无关。即使特定对象先前已由上下文加载(它们没有),我仍然希望它们出现在 ReportAreas 集合中。否则数据库的引用完整性会被完全抛弃,因为当我从服务器加载时,由于客户端上“不存在”这些对象,我可能会尝试重新插入已经在服务器上的对象。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多