NHibernate - регистрировать элементы, которые появляются в результатах поиска - PullRequest
2 голосов
/ 26 апреля 2010

Я использую NHibernate в приложении MVC 2.0. По сути, я хочу отслеживать, сколько раз каждый продукт появляется в результатах поиска. Например, когда кто-то ищет виджет, продукт с именем WidgetA появится на первой странице результатов поиска. На этом этапе я увеличу поле в базе данных, чтобы отразить, что оно появилось как часть результата поиска.

Хотя это довольно просто, я обеспокоен тем, что сами вставки значительно замедляют результаты поиска. Я хотел бы объединить мои утверждения вместе, но кажется, что соединение моих вставок с моим выбором может быть контрпродуктивным. Кто-нибудь пытался сделать это в NHibernate и, если да, существуют ли какие-либо стандартные шаблоны для выполнения операций такого рода?

1 Ответ

1 голос
/ 27 апреля 2010

Интересный вопрос!

Вот возможное решение:

var searchResults = session.CreateCriteria<Product>()
    //your query parameters here
    .List<Product>();
session.CreateQuery(@"update Product set SearchCount = SearchCount + 1
                      where Id in (:productIds)")
       .SetParameterList("productIds", searchResults.Select(p => p.Id).ToList())
       .ExecuteUpdate();

Конечно, вы можете выполнять поиск с помощью критериев, HQL, SQL, Linq и т. Д.

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

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