我需要传递 POCO 域对象(急切加载)。在分析了实体框架和 NHibernate 之后,我找不到解决方案!
通过 NHibernate 分析底层 SQL 和查询,我发现
ISession.CreateQuery (string HQL).SetMaxResults(N)
不在TOP N
SQL 中实现,但总是将所有数据下载到 .NET,然后才获取子集(太愚蠢了)
那么如何将复杂的查询发送到大表呢?
ICreteria
(SetMaxResults
在 SQL 中实现)和IQueryOver
(Take()
在 SQL 中的 impl)是不灵活的,例如,只有使用左连接才能进行急切加载。还有自定义子查询、顶部、过滤或排序依据等。显然 SQL 的灵活性要高得多。
实体框架是流畅的,似乎可以让魔法发生,但是 SOO-O DAMN SLOW!
经过一周的工作,我能想到的最好的灵活急切加载是TOP N
由预加载的 HQLIList
和SetParameterList
.
有没有更好的解决方案?