我正在使用 LinqKit 使用动态生成的过滤器构建查询。
该查询从数据库中获取一个相当大的对象图以执行计算并对该数据进行一些其他修改。只要我不在Includes
查询中使用,从数据库中获取我需要的主要实体并不需要很长时间。但是,不幸的是,我需要它的许多相关实体来执行所需的计算。
每次我添加一个Include
,这都会转化为 SQL 中的一个新的嵌套子查询。我有大约 8 或 9 个Inlcudes
,所以这转化为很多嵌套的子查询。该查询需要永远返回数据。
我希望所有这些嵌套的子查询从 SQL 中消失,但是按照我想要从应用程序端使用 LinqKit 的方式来塑造 SQL 有点困难。
我认为,对于这种特定情况,最好按照我希望 SQL 的方式编写存储过程,然后从实体框架中调用它。
我的问题是我不知道如何使用存储过程在应用程序端获取对象图。我可以让 EF 生成一个ComplexType
将所有数据包含在单个“实体”中的数据,但是执行计算的代码等待特定的实体对象图(主要实体及其相关实体),因此代码不知道那ComplexType
是什么。我真的不想重写计算引擎来使用它ComplexType
。我可以将结果映射到单个实体,但只会返回该实体。我也希望返回相关实体。
看起来我被夹在一块石头和一个疯狂的地方之间。
任何人都可以提出任何建议吗?