我需要传递POCO域对象(急切加载)。在分析了实体框架和NHibernate之后,我找不到解决方案!
通过使用NHibernate分析底层SQL和查询,我发现
ISession.CreateQuery (string HQL).SetMaxResults(N)
没有在SQL中实现TOP N
,但总是将所有数据下载到.NET,然后才获取子集(太愚蠢了)
那么如何向大型表发送复杂的查询呢?
ICreteria
(在SQL中实现的SetMaxResults
)和IQueryOver
(在SQL中执行Take()
)是不灵活的,例如,只有使用left join才能进行紧急加载。还有自定义子查询、top、higher或order by等,显然SQL的灵活性要高得多。
实体框架是流动的,似乎能创造奇迹,但SOO-O太慢了!
经过一周的工作,我能想到的最灵活的急切加载是HQL,它带有由预加载的IList
和SetParameterList
实现的TOP N
。
有没有更好的解决方案?
发布于 2013-06-16 07:45:40
我可能走错了(我现在不能检查答案),但是你不能在查询本身中传递"top X“吗?类似于:
ISession.CreateQuery("select top" + n + " ...");
https://stackoverflow.com/questions/17112567
复制