从microsoft阅读了ODataProviderToolkit的'Custom Data Service Providers' documentation之后,我最终有点困惑从哪里开始。 我的意图是,为数据库中的表创建一个OData服务器,在编译期间该结构是未知的。这是我们无法改变的。
现在,每次用户重新配置此表时,我们都会从数据库更新模型,编译和更新OData服务。这不合适。
文档“第4部分:基本只读无类型数据提供程序”解释了使用Linq对象的实现。实现非常复杂,创建了IQueryable数据提供程序。
我的问题:使用提供TSQL数据提供者和IQueryable接口的标准类,请求的实现是否应该简单明了?! 使用TSQL数据源,SQLConnectionString,c#EF 4和linq到sql ......
我只是不知道如何把它们放在一起。
或者是否真的有必要实现所有这些表达式树相关的方法,如ExpressionVisitor,GetSquenceValueMethodInfo等?
提前致谢。
答案 0 :(得分:1)
大约半年前我试过这个(Web API OData 2)。我所做的是为每个请求动态创建EDM模型,并将其设置为自定义OData Route约束。在控制器中,我返回了与当前请求对应的类型的EdmEntityObjects。我希望返回一个IQueryable会做所有过滤的魔力,但它没有说不支持该操作。 我们(timecockpit)已经为OData AST实现了QueryNodeVisitor,这比完整的IQueryable实现复杂得多。我们不支持所有功能,但仅支持我们的自定义查询语言(TCQL)中提供的功能。
如果较新的OData Web API支持对无类型EdmEntityObjects进行过滤,我最近还没有检查过。即使,仍然会将过滤器标准传递给SQL数据库,以便在过滤之前不将所有实体加载到内存中。
我怀疑使用Linq-2-SQL直接将查询转发到SQL是有效的,我希望至少有一些重写的查询(例如,用于添加权限检查)在每个除了最简单的应用程序之外都是必要的。