0

在阅读了来自微软的 ODataProviderToolkit 的“自定义数据服务提供者”文档后,我最终有点困惑从哪里开始。我的意图是为数据库中的表提供一个 OData 服务器,该表的结构在编译时是未知的。这是我们无法改变的。

现在,每次用户重新配置此表时,我们都会从数据库中更新我们的模型,编译和更新 OData 服务。这不合适。

文档“第 4 部分:基本只读无类型数据提供程序”解释了使用 Linq 到对象的实现。实现非常复杂,创建 IQueryable 数据提供者。

我的问题:使用提供 TSQL 数据提供程序和 IQueryable 接口的标准类,请求的实现不应该简单直接吗?!使用 TSQL 数据源、SQLConnectionString、c# EF 4 和 linq to sql...

我只是不知道如何把这一切放在一起。

还是真的有必要实现所有这些与表达式树相关的方法,如 ExpressionVisitor、GetSquenceValueMethodInfo 等?

提前致谢。

4

1 回答 1

1

我大约半年前尝试过这个(Web API OData 2)。我所做的是为每个请求动态创建 EDM 模型,并将其设置在自定义 OData 路由约束中。在控制器中,我返回了与当前请求对应的类型的 EdmEntityObjects。我希望返回一个 IQueryable 会完成过滤的所有魔力,但它没有说不支持该操作。我们(timecockpit)已经为 OData AST 实现了一个 QueryNodeVisitor,它比完整的 IQueryable 实现简单得多。我们不支持所有功能,仅支持我们的自定义查询语言 (TCQL) 中可用的功能。

我最近没有检查更新的 OData Web API 是否支持对无类型 EdmEntityObjects 进行过滤。即使,仍然会将过滤条件传递给 SQL 数据库,以便在过滤之前不将所有实体加载到内存中。

我怀疑使用 Linq-2-SQL 直接将查询转发到 SQL 是否可行,并且我希望在除了最微不足道的应用程序之外的所有应用程序中至少需要对查询进行一些重写(例如,添加权限检查)。

于 2014-11-20T12:37:30.693 回答