将OData查询转换为SQL

时间:2015-02-06 19:07:29

标签: asp.net-web-api odata asp.net-web-api-odata

我在ODataController中,我有一个ODataQueryOptions(以及其他所有内容)。

我知道数据源是SQL Server中的一个表。

但是,我的EF模型(WEB API框架用于将HTTP请求路由到我的控制器)是无类型的,即我没有POCO类。

通常情况下 - 如果我确实有一个POCO类 - 框架会神奇地从OData查询中编写SQL,以便在数据库上完成分页,过滤和排序,而不是在Web服务器的内存中完成。您可以在Database.Log上使用DbContext来查看从涉及POCO类的LINQ语句生成的SQL。

我如何才能让这件事发生在我身上?我有EF模型,我有OData请求,但如何将它们组合起来查询SQL Server?

1 个答案:

答案 0 :(得分:0)

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

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