使用c#+ Entity Framework +存储过程构建动态查询

时间:2012-02-10 17:09:59

标签: c# entity-framework stored-procedures orm dynamic-queries

我正在开发一项功能,用户可以在每个参数中选择多个参数的多个参数。我试图找到一种方法来在我的应用程序中使用C#设计此功能,实体框架将实体映射到存储过程。出于安全原因,我的应用程序必须通过仅具有存储过程的代理数据库访问数据库。因此,我的实体映射到插入,更新和选择的存储过程。 最后,我需要将用户选择的过滤器传递给存储过程以查询数据库。我想到的解决方案之一是将所有数据检索到我的业务层,并使用linq进一步过滤掉。但这并不理想,因为在内存评估器中过滤的数据量大于数据库中更适合进行此类复杂查询的数据库。 我已经看到了使用linq构建动态查询的帖子,但在这些帖子中,实体被映射到表格,这使得它更容易。 任何帮助将非常感谢。 谢谢, sirkal

1 个答案:

答案 0 :(得分:0)

EF(和LINQ)使用延迟执行。您可以使用IQueryable(Google搜索时间?)轻松创建动态查询,并在您构建的对象中创建过滤条件(您可以在没有对象的情况下执行此操作,但可以考虑重复使用)。

对于SQL sproc,您也可以通过传入可能更改过滤器的所有项目并让SQL动态处理数据以生成结果集来解决它。

选择哪个?这实际上取决于核心能力在您的小组中的位置。我更喜欢C#代码,主要是因为熟悉(花了几年时间做了sprocs,但动态的sprocs可能是一种皇家的痛苦)。

现在,你想要警惕的一件事是最终得到服务器无法轻易调整的动态查询(比如SQL Server中的统计信息,尽管其他RDBMS使用类似的概念)。例如,我在LINQ to SQL中看到的一个问题是动态查询会导致SQL执行速度低于最佳状态,需要DBA提供大量的手动操作。