Лучший способ реализовать функциональность, аналогичную lazy = "extra", с помощью NHibernate 2.0.1 - PullRequest
5 голосов
/ 03 декабря 2008

У меня есть отношение многие-к-одному, когда в дочерней таблице могут быть сотни тысяч записей. В этом случае вызов Parent.ChildCollection.Count приводит к отложенной инициализации дочерней коллекции, что является чрезвычайно дорогостоящим.

В Hibernate 3.0 есть функция lazy = "extra", которая позволяет вам проверять подмножество свойств коллекции, не загружая их целиком.

К сожалению, это не будет доступно до NHibernate 2.1, который все еще находится в Альфе. http://jira.nhibernate.org/browse/NH-855

Как мне это сделать с помощью NHibernate 2.0.1?

Раньше у меня были специальные свойства, такие как это

<property name="ChildCollectionCount" type="int" formula="(select count(*) from ChildTable child where child.parentID = parentID "/>

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

Ответы [ 3 ]

0 голосов
/ 11 февраля 2010

очень поздно, но вы можете применить фильтр к коллекции

IQuery q = nhSession.CreateFilter(Parent.ChildCollection, "select count(*)");
long countResult = q.UniqueResult<long>();

это не заставит инициализировать коллекцию, а вместо этого выполнит один запрос к базе данных

0 голосов
/ 16 июля 2010

Я бы порекомендовал отдельный запрос, а не доменные отношения. Тогда вы можете использовать все виды оптимизаций.

0 голосов
/ 23 декабря 2008

Когда вы говорите, что это проблема производительности для других пользователей, вы имеете в виду, что они также хотят получить доступ к коллекции, но она слишком велика для них. Или фрагмент кода / ChildCollectionCount слишком медленный для них?

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

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