使用LinqKit的动态查询太慢了!在这种情况下,存储过程会更好吗
本文关键字:这种情况下 存储过程 更好 LinqKit 动态 查询 使用 | 更新日期: 2023-09-27 18:24:00
我正在使用LinqKit使用动态生成的过滤器构建查询。
该查询从数据库中获取一个相当大的对象图来执行计算,并对该数据进行一些其他修改。只要我在查询中不使用Includes
,就不会花很长时间从数据库中获得我需要的主实体。但是,不幸的是,我需要它的许多相关实体来执行所需的计算。
每次添加Include
时,都会转换为SQL中新的嵌套子查询。我有大约8或9个Inlcudes
,所以这转化为许多嵌套子查询。该查询需要很长时间才能返回数据。
我希望所有这些嵌套的子查询都能从SQL中消失,但要按照我希望从应用程序端使用LinqKit的方式来塑造SQL有点困难。
我认为,对于这种特定的情况,最好按照我希望的SQL方式编写一个存储过程,并从实体框架中调用它。
我的问题是,我不知道如何使用存储过程在应用程序端获得对象图。我可以让EF生成一个ComplexType
,它将包括单个"实体"中的所有数据,但进行计算的代码等待一个特定实体对象图(主实体及其相关实体),所以代码不知道ComplexType
是什么。我真的不想重写计算引擎来使用ComplexType
。我可以将结果映射到单个实体,但只有那个实体才会被返回。我希望相关实体也被退回。
看起来我陷入了进退两难的境地。
有人能提出什么建议吗?
我们也遇到了类似的问题。我们最终构建了SQL视图,并根据这些视图进行查询。我还认为这是CQRS模式的想法,基本上,您可以将读取模型和写入模型分开。