用c++实体框架+存储过程构造动态查询

本文关键字:动态 查询 存储过程 c++ 实体 框架 | 更新日期: 2023-09-27 18:23:58

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

用c++实体框架+存储过程构造动态查询

EF(以及LINQ)使用延迟执行。使用IQueryable(谷歌搜索时间?)可以很容易地创建动态查询,并在您构建的对象中创建过滤条件(您可以在没有对象的情况下创建,但认为可以重复使用)。

至于SQL存储过程,您也可以通过传递所有可能更改筛选器的项来解决它,并让SQL动态处理数据以生成结果集。

选择哪个?这实际上取决于你团队的核心能力在哪里。我更喜欢C#代码,主要是因为熟悉(多年来一直在做sproc,但动态sproc可能是一种巨大的痛苦)。

现在,您需要注意的一件事是,最终会出现服务器无法轻松调整的动态查询(如SQL server中的统计信息,尽管其他RDBMS使用类似的概念)。例如,我在LINQ to SQL中看到的一个问题是,动态查询会导致SQL的性能低于最佳状态,需要DBA进行大量的处理。