我有以下模型:
A
1
|
*
B
^ ^
| |
B1 B2
其中 B 是 B1 和 B2 的抽象超类。我现在有一个 PSQuery,例如:
var data = es.PSQuery<A>().Where(..).SelectMany(x => x.Bs).ToList();
生成的 SQL 如下所示:
SELECT ALIAS.ID FROM B ALIAS WHERE ....
然后 MDriven 获取块中的所有鉴别器以确定对象的类型,因此这些可以是一些 SQL:
SELECT ALIAS.ID, ALIAS.DISCRIMINATOR FROM B ALIAS WHERE ID in (?, ? ....)
现在 MDriven 知道类型并可以加载数据。总而言之,这个过程比手工 SQL 花费的时间要长得多。所以我的问题是:
- 我可以从 PSQuery 获取 SQL 以便我自己执行它吗?在这种情况下,我构建了一个非常复杂的表达式,我更喜欢构建 PSQuery 来构建 SQL 字符串。
- 如果 MDriven 将在第一个 SQL 中加载描述符,则不需要延迟加载。我们为此表使用自定义 OR-Mapping。是否可以将鉴别器包含在第一个 SQL 中?
- 是否有不同的提示来防止这种耗时的加载行为(保持模型不变)?