哪个更容易,编写自定义OData uri解析器或自定义IQueryable提供程序?

时间:2011-09-30 17:13:23

标签: odata wcf-data-services iqueryable

我想创建一个从多个源返回数据的OData服务。出于这个原因,我不能将WCF数据服务与任何开箱即用的提供商一起使用,而且我们真的希望能够更好地控制数据模型。

如果我们坚持使用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吗?

  3. 哪种方法最容易实施?我们大多只想支持OData规范的$ filter功能,$ expand和$ select可以在以后使用。

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

1 个答案:

答案 0 :(得分:5)

您可以编写自己的数据上下文类。您需要的功能越多,工作量就越大。 WCF Data Services Toolkit可能会有所帮助,我发现MIX的这个OData Roadmap: Exposing Any Data Source as an OData service演示文稿很有帮助。

所以我说编写一个自定义的IQueryable提供者会更容易和更清洁。