哪个更容易,编写自定义 OData uri 解析器或自定义 IQueryable 提供程序?
Posted
技术标签:
【中文标题】哪个更容易,编写自定义 OData uri 解析器或自定义 IQueryable 提供程序?【英文标题】:Which is easier, write a Custom OData uri parser or a custom IQueryable provider? 【发布时间】:2011-11-28 15:37:56 【问题描述】:我想创建一个从多个来源返回数据的 OData 服务。出于这个原因,我不能将 WCF 数据服务与任何开箱即用的提供程序一起使用,而且我们确实希望对数据模型进行更多控制。
我知道如果我们坚持使用 MS 产品堆栈,我们有两个选择;
使用 WCF 和 WebGet/WebInvoke 来模拟 OData api,并在内部执行查询字符串解析和翻译。例如对于我们的数据在 Sql 数据库中的情况,我们必须将 $filter 子句转换为 SQL where 子句才能构建查询。请注意,我们不能在这里使用任何类型的 ORM,因为我们的数据模型是动态的,并且我们没有任何可以使用 ORM 填充的 CLR 实体类。
我们将 WCF 数据服务与自定义提供程序一起使用,这要求我们为资源集传递一个 IQueryable,这让我们要么执行 Select * FROM Table 并使用 Linq to objects,要么实现我们自己的 IQueryable支持 OData 所需表达式的提供程序。 WCF 数据服务是否会接受 IQuerable?
哪个最容易实现?我们主要只是想支持 OData 规范的 $filter 功能,$expand 和 $select 可以在以后出现。
放弃 WCF 数据服务似乎是一种耻辱,如果它可以提供解析的 OData 查询,然后您可以自己转换为 Linq 查询,而不是期望您的数据源具有 IQueryable 提供程序,那将是更好的选择。
【问题讨论】:
【参考方案1】:您可以编写自己的数据上下文类。您需要的功能越多,工作量就越大。 WCF Data Services Toolkit 可能会有所帮助,我发现来自 MIX 的 OData Roadmap: Exposing Any Data Source as an OData service 演示很有帮助。
所以我说编写自定义 IQueryable 提供程序会更容易和更简洁。
【讨论】:
以上是关于哪个更容易,编写自定义 OData uri 解析器或自定义 IQueryable 提供程序?的主要内容,如果未能解决你的问题,请参考以下文章