ODATA EXPAND无法正常工作

时间:2012-01-10 15:53:40

标签: c# wcf-data-services odata

我有一个网址过滤器,如: t1?$ filter = ID eq 1& $ expand = t2 / t3 / t4 / t5 / t6

现在,当我使用上下文运行此查询作为第一个查询时,我得到了所有内容!当我从另一个页面运行同一个,并且它是使用相同的objectcontext在前一个查询之后运行的第二个查询,然后查询在t3停止扩展!即使对象id明显存在,该对象也为null。数据存在!所以这里有一些奇怪的东西。注意:我使用的是singleton objectcontext工厂类,因此每个页面都会实例化自己的对象上下文,以用于执行CRUD操作。

1 个答案:

答案 0 :(得分:10)

假设您正在使用WCF DS客户端库(DataServiceContext和相关类),那很可能是由于客户端上的DataServiceContext.MergeOption设置。默认值为AppendOnly,这意味着如果客户端上已存在给定实体的实例,则从服务器传入的新数据将不会更新它(这是为了防止查询覆盖在客户端上进行的可能更改)。您可以将MergeOption更改为OverwriteChanges,然后将使用服务器值。 (它甚至适用于导航属性,这就是扩展似乎不起作用的原因,但实际上服务器会将数据发送回客户端,但客户端会将其丢弃)。