NHibernate Lazy = "Extra" - PullRequest
       1

NHibernate Lazy = "Extra"

13 голосов
/ 22 февраля 2011

Есть ли хорошее объяснение, на что именно способен lazy = "extra"?

Все сообщения, которые я видел, просто повторяют тот факт, что он превращает ссылки на MyObject.ItsCollection.Count в selectколичество (*) запросов (при условии, что они еще не загружены).

Я хотел бы знать, способен ли он на более надежные вещи, такие как превращение MyObject.ItsCollection.Any(o => o.Whatever == 5) в запрос SELECT ...EXISTS.

Раздел 18.1 только документов затрагивает это.Я не разработчик NH, поэтому я не могу поэкспериментировать с ним и посмотреть SQL Profiler, не выполнив немного работы по настройке;Я просто ищу какой-то справочник, описывающий, на что способна эта функция.

Спасибо!

Ответы [ 3 ]

20 голосов
/ 22 февраля 2011

для версии 2.x он используется только для перевода collection.Count() в select count, и, насколько я могу видеть в источнике, он также позволит конструкции collection[5] извлечь эту конкретную сущность (синдекс 5) вместо увлажнения всей коллекции.

Для версии 3.xi не вижу ничего связанного с заметками о выпуске

5 голосов
/ 24 февраля 2012

Только что попытался вызвать Any () для Collection Customer.Orders, сопоставленной с lazy = "extra"

customer.Orders.Any()

, и результирующий оператор SQL выглядел примерно так (упрощенно):

SELECT *
FROM Order
WHERE CustomerId = 120

Тогда как при вызове

customer.Orders.Count > 0

результирующий SQL выглядел так:

SELECT count(*)
FROM Order
WHERE CustomerId = 120
4 голосов
/ 22 февраля 2011

Ленивый = дополнительный позволяет подсчитывать элемент коллекции без необходимости его извлечения, поскольку ленивый объект украшен прокси, когда клиентский код запрашивает .Count в коллекции, собственно "select count "запрос выдается в базу данных. Без lazy=extra коллекция считывается из базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...