Гибкость с быстрой загрузкой огромных графов объектов, NHibernate HQL TOP N в SQL

Мне нужно передать объекты домена POCO (нетерпеливо загруженные). Проанализировав Entity Framework и NHibernate, я не могу найти решение!

Анализируя базовый SQL и запросы NHibernate, я обнаружил, что

ISession.CreateQuery (string HQL).SetMaxResults(N)

не реализует TOP N в SQL, а всегда загружает все данные в .NET и только потом берет подмножество (так глупо)

Итак, как я могу отправлять сложные запросы к огромным таблицам?

ICreteria (SetMaxResults реализовано в SQL) и IQueryOver (Take() реализовано в SQL) негибкие, например, активная загрузка возможна ТОЛЬКО с левым соединением. также пользовательские подзапросы, топ, фильтрация или порядок по и т. д. Очевидно, что гибкость SQL находится на гораздо более высоком уровне.

Entity Framework работает плавно и, кажется, творит чудеса, но ОЧЕНЬ МЕДЛЕННО!

Лучшая гибкая нетерпеливая загрузка, которую я могу придумать после недели работы, — это HQL с TOP N, реализованным с помощью предварительно загруженных IList и SetParameterList.

Есть ли лучшее решение?


person Andres Kalev Rebane    schedule 14.06.2013    source источник


Ответы (1)


Я могу быть далеко (я не могу проверить ответ прямо сейчас), но вы не можете передать «верхний X» в самом запросе. Что-то типа:

ISession.CreateQuery("select top" + n + " ...");
person rivarolle    schedule 16.06.2013