Я сейчас работаю над точно такой же вещью и столкнулся с той же проблемой.Попытка сохранить новый объект и оператор INSERT
даже не выполняется.Я нашел статью о с использованием прослушивателей Pre [Update | Insert] для аудита каждой записи , где один комментарий спрашивает о вставке новой сущности, а автор отвечает, что требуется дочерний сеанс.
private void AddArticleBindingAuditEvent(ISession session,
bool isInsert, ArticleBinding binding)
{
var childSession = e.Session.GetSession(EntityMode.Poco);
var auditRecord = new AuditArticleBinding()
{
ArticleId = binding.ArticleId,
Action = (isInsert) ? "Add" : "Delete",
LoggedBy = string.IsNullOrEmpty(Thread.CurrentPrincipal.Identity.Name)
? "Unknown"
: Thread.CurrentPrincipal.Identity.Name
};
childSession.Save(auditRecord);
childSession.Flush();
}
Еще один справочник для вас (который я нашел сегодня) - Аудит с помощью NHibernate Listeners .В нем приведен полный пример вставки нового журнала аудита, но используются прослушиватели Post и он не привязан к сущности (выполняет почти то же самое, что и я, с сохранением для поиска измененных значений).Я не уверен, в чем выгода от использования прослушивателей Pre.
И, как «просто на всякий случай», вы должны убедиться, что вы подключили прослушиватель событий к вашей конфигурации:
var eventListener = new AuditEventListener();
config.SetListener(ListenerType.PreInsert, eventListener);
config.SetListener(ListenerType.PreDelete, eventListener);
Полное раскрытие информации : Я довольно новичок в NHibernate, поэтому, если я что-то пропустил или мог бы сделать лучше, пожалуйста, дайте мне знать.Описанный выше метод работает для меня в том, что моя запись успешно вставлена в базу данных, но в некоторых случаях она не работает.Хотя я почти уверен, что это специфично для моего приложения (из которого я новичок в кодовой базе, так что все еще работаю)