2015-02-06 91 views
2

我在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?

+0

我通过在https://github.com/cuongle/DynamicOdata将OData查询转换为SQL来编写了一个动态ODATA。 – 2015-12-14 22:47:22

回答

0

我写了一个package将OData查询转换成IQueryable对象,可用于直接查询底层数据库。您仍然需要提供关于表的元数据,但是它可以在运行时传递,而不需要POCO。

就生成SQL而言,返回的IQueryable对象是EntityFramework ObjectQuery对象,因此您只需调用ToString()即可显示SQL,但目前无法检索参数和关联值,因此您只是最好使用生成的IQueryable直接查询数据库。