2011-09-30 64 views
3

我想创建一个从多个来源返回数据的OData服务。由于这个原因,我无法将WCF数据服务与任何开箱即用的提供程序一起使用,而且我们真的想要更多地控制数据模型。哪个更容易,编写一个自定义OData uri解析器或自定义IQueryable提供程序?

我看到我们有两个选择,如果我们坚持MS产品堆栈;

  1. 使用WCF与WebGet/WebInvoke模仿OData api,并在内部执行查询字符串解析和转换。例如对于我们的数据在Sql数据库中的情况,我们必须将$ filter子句转换为SQL where子句才能构建我们的查询。请注意,这里我们不能使用任何类型的ORM,因为我们的数据模型是动态的,并且我们没有任何可以使用ORM填充的CLR实体类。

  2. 我们将WCF数据服务与自定义提供程序一起使用,这要求我们为资源集传递一个IQueryable,这使我们无论是执行Select * FROM Table并将Linq用于对象,还是实现我们自己的IQueryable提供程序支持OData所需的表达式。 WCF数据服务是否会接受IQuerable?

哪个会最容易实现?我们大多只想支持OData规范的$过滤器功能,$ expand和$ select可以稍后提供。

放弃WCF数据服务似乎是一种遗憾,如果它可以提供经过解析的OData查询,然后您可以自己转换为Linq查询,而不是期待您的数据源具有IQueryable提供程序,那将是更可取的。

回答

相关问题