0

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

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

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

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

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

спасибо!

+0

i havent используется S # Arch, но я думаю, что вам нужно создать файл карты nhibernate (FluentMapping или hbm.xml) где-нибудь и передать его как mappingassembly для метода Init – Firo

+0

, это странно, но после этого я сделал это (hbm.xml) появляется исключение - «объект дублирования сопоставления» – barser

+0

ли nbm.xml содержит только отображение для «Document_AUD»? и если файл сопоставления находится в том же файле, что и другие, вы даете Init для сборки сопоставления только один раз? – Firo

ответ

0

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

2

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

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

ExposeConfiguration(Action<Configuration> action) 

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

+1

у вас есть полный пример того, как вы создали расширение, пожалуйста? Я немного потеряю, с чего начать! – Rowan

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