2015-03-23 2 views
1

Есть ли простой способ присоединиться к последней информации о ревизии для объекта при запросе объекта?Присоединение к NHibernate. Информация об обновлении проверяемого объекта

Другой способ - сопоставление свойств (с использованием Fluent NHibernate) с сущностью, например. a entity.LatestRevisionDateTime Недвижимость.

Это необходимо, так как у нас есть несколько экранов, отображающих последнее время даты изменения и пользователя, с помощью которого объект был изменен. Нам также требуется хотя бы один запрос, который возвращает объекты, которые были изменены с определенной даты. Это было бы намного проще и эффективнее, если бы нам не нужно было объединять память (меньше DB roundtrips, меньше памяти).

We`re с помощью:

  • NHibernate 4.0.3.400
  • FluentNHibernate 2.0.1.0
  • Hibernate.Envers 2.0.0

ответ

0

Чтобы получить объекты и пересмотра информации в одном отчете вы можете использовать

session.Auditer().CreateQuery() 
    .ForHistoryOf<YourEntityType, YourRevisionType>() 
    .Add([some filters]) 
    .Results() 

Чтобы получить последнюю/текущий объект вместе с объектом пересмотра, я думаю, что это работает (AFK так не может проверить)

session.Auditer().CreateQuery() 
    .ForHistoryOf<YourEntityType, YourRevisionType>() 
    .Add(AuditEntity.RevisionNumber().Maximize().ComputeAggregationInInstanceContext()) 
    .Results() 
+0

API-интерфейс запросов весьма ограничен, и это создает ВЫБРАТЬ N + 1 Проблема при использовании комплекса Запрос NHibernate для извлечения сущностей, а затем использование запроса аудита для каждого результата не является идеальным ... – sanosdole

+0

Ok. Если вы найдете лучший/более быстрый способ, не стесняйтесь создавать запрос на перенос, чтобы переключить репо. О проблеме выбора n + 1 ... Это может быть вызвано этой ошибкой, https://nhibernate.jira.com/browse/NH-2907. Пожалуйста, проголосуйте за него. – Roger

+0

Я думал что-то по линии использования таблиц аудита в обычных NHibernate-запросах, так как я считаю, что в Envers используется NHibernate для доступа к этим таблицам. Поэтому они должны быть в NHibernate-Configuration, и поэтому они должны использоваться в запросах для присоединения ... – sanosdole

Смежные вопросы