Мне нужно передать объекты домена 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
.
Есть ли лучшее решение?