扩展WCF数据服务以根据请求合成丢失的数据

时间:2010-04-01 05:29:47

标签: wcf wcf-data-services

我有一个基于LINQ to SQL数据提供程序的WCF数据服务。

我正在进行查询“获取两个日期之间的所有记录”。

问题在于我想要合成两个额外的记录,这样我总能得到落在开始和结束日期的记录,以及来自数据库的所有记录。

有没有办法“拦截”请求,以便我可以合成这些记录并将它们返回给客户端?

由于

2 个答案:

答案 0 :(得分:0)

我怀疑答案涉及使用“拦截器”。

偶然发现了这个...... http://msdn.microsoft.com/en-us/library/dd744842.aspx

答案 1 :(得分:0)

我想的越多,我就越会说“请不要这样做”。问题是在WCF数据服务(或OData)中,您返回的每个实体(entity == record)都需要具有其唯一的URI。客户端还假设如果从服务器返回实体(除非它被删除),则可以再次访问该实体。 但在您的情况下,边界实体由查询定义,它们实际上只存在于查询的上下文中。给出不同的查询它们是不同的。总而言之,它们的行为与实体不同,它们的行为更像是某种查询元数据。

无论如何,如果你真的认为这是正确的事情......这样做很难。我能想到的唯一方法是挂钩从实体集返回的IQueryable(将您自己的IQueryable层叠在LINQ to SQL之上)。然后当执行查询时,解析表达式树并找到定义范围的条件,然后返回IEnumerable的自定义实现,它将在开始和结束时“合成”两个特殊实体,它将返回从基础LINQ到SQL结果休息。所有这些都是很多代码,这绝对不容易。

第二种可能的方法是将其实现为服务操作(要求客户端知道服务器上有特殊操作来执行此操作)。它也会更有意义,因为服务操作会将范围作为参数而不是过滤器,因此更容易找出范围(没有表达式树解析)。