Chapter 8 of the NiA book describes a way to use an IInterceptor
(actually a subclass of EmptyInterceptor) to audit entity changes. The
example uses a "temporary session pattern" by using the connection
from the active session to create a new, temporary session for writing
a new audit entity:
foreach(object entity in inserts) {
AuditLog.LogEvent(LogType.Create, entity, userId,
session.Connection);
}
...
public static void LogEvent(
LogType logType,
object entity,
long userId,
IDbConnection connection) {
using(ISession tempSession =
sessionFactory.OpenSession(connection)) {
AuditLogRecord record = new
AuditLogRecord(logType.ToString(),
tempSession.GetIdentifier(entity),
entity.GetType(),
userId);
tempSession.Save(record);
tempSession.Flush();
}
}
I tried implementing this, but unfortunately it does not work, at
least not when the top-level session has an active transaction. When I
implemented it, the Save failed with this exception:
System.InvalidOperationException : ExecuteNonQuery requires the
command to have a transaction when the connection assigned to the
command is in a pending local transaction. The Transaction property
of the command has not been initialized.
Looks like this was brought up a couple of years ago:
http://groups.google.com/group/nhusers/browse_thread/thread/f19ff3332da6bf61/e5ed014435abb420
Is this a known issue, and is there a workaround?
--
You received this message because you are subscribed to the Google Groups
"nhusers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/nhusers?hl=en.