Sharp Architecture + NHibernate Envers

В настоящее время мы используем Sharp Architecture 1.9.6. И нам нужно провести аудит наших классов доменов. Кажется, удобно использовать NHibernate Envers для этой задачи. Но я не смог настроить Sharp Architecture для использования этой библиотеки. Были некоторые ошибки, но я решил почти все из них, кроме одной.

Ошибка в следующем:

Например, у меня есть класс POCO с именем "Документ" и таблица "Документы" в БД. Также я создал таблицу "Documents_AUD" и добавил атрибут [Audited] в класс "Document". Таким образом, если какой-либо объект класса Document изменился, Envers должен добавить данные в таблицу "Documents_AUD". Для этого Энверс создает (динамически?) Объект другого класса - "Document_AUD". И здесь появляется ошибка: "NHibernate.MappingException No Persister for Document_AUD".

И я не знаю, где добавить сопоставление для Document_AUD.

Кто-нибудь использует Envers с Sharp Arch? Может кто-нибудь поделиться конфигурацией Envers + Sharp Arch?

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

2 ответа

Решение

Вы можете создать конфигурацию самостоятельно, настроить Envers и передать ее в NHibernateSession.AddConfiguration() вместо вызова метода Init.

Проблема заключается в том, что конфигурация NHibernate.Envers должна выполняться до создания фабрики сеансов, но после добавления отображений hbm в конфигурацию. В SharpArch при вызове NHibernateSession.Init(..) он немедленно создает фабрику сессий, добавляя ее в локальный кеш.

Решением было бы расширить метод NHibernate.Init, чтобы использовать API FluentNHibernate FluentConfiguration, который имеет метод

ExposeConfiguration(Action<Configuration> action) 

это называется сразу после добавления беглых отображений.

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