Nhibernate обрабатывает Linq on Collection Property и загружает все перед применением куда? не для запроса?

Начал использовать NHibernate не очень давно. Использовали EF на протяжении многих лет.

Как я понимаю, LazyLoading загружает только необходимые данные, когда это необходимо. Коллекции следует сохранять как запрашиваемые, пока не будет вызван ToList() или что-то подобное.

Однако, только что выяснив, когда я использую свойство коллекции внутри запроса linq, nhibernate фактически загружает полную коллекцию в виде списка перед добавлением запроса сверху.

Например: User.Items.Count ();

Nhibernate загрузить полный список элементов, прежде чем считать. Насколько я знаю, EF будет вызывать базу данных только для подсчета, а не для полного списка элементов.

Может кто-нибудь объяснить почему? и как сохранить свойство коллекции как запрашиваемое, пока не понадобится?

Большое спасибо.

1 ответ

Решение

NHibernate загружает полную коллекцию, потому что поддерживает различные каскадные параметры для коллекций.

Вы не сможете хранить bag или же set как запрашиваемый для последующего выполнения SQL. Единственная оптимизация, которую вы можете сделать, это установить lazy="extra" который переведет ваш счетчик, содержит запросы к соответствующему SQL, но не к LINQ.

Другие вопросы по тегам