将OData查询翻译成SQL
问题描述:
我在ODataController
中,我有一个ODataQueryOptions
(以及其余所有内容)。将OData查询翻译成SQL
我知道数据的来源是SQL Server中的表。
但是,我的EF模型(被WEB API框架用来将HTTP请求路由到我的控制器)是无类型的,即我没有POCO类。
通常情况下 - 如果我确实有POCO类 - 框架会奇迹般地从OData查询中写入SQL,以便在数据库上完成分页,过滤和排序,而不是在Web服务器上的内存中完成。您可以在DbContext
上使用Database.Log
来查看由涉及POCO类的LINQ语句生成的SQL。
我该怎么做到这一点?我有EF模型,我有OData请求,但是如何将它们组合起来以查询SQL Server?
答
我写了一个package将OData查询转换成IQueryable
对象,可用于直接查询底层数据库。您仍然需要提供关于表的元数据,但是它可以在运行时传递,而不需要POCO。
就生成SQL而言,返回的IQueryable对象是EntityFramework ObjectQuery对象,因此您只需调用ToString()
即可显示SQL,但目前无法检索参数和关联值,因此您只是最好使用生成的IQueryable
直接查询数据库。
我通过在https://github.com/cuongle/DynamicOdata将OData查询转换为SQL来编写了一个动态ODATA。 – 2015-12-14 22:47:22