Since the event listener is hooked into the session factory, won't this create a recursion? The session.Save will trigger the listener again while still in the listener.
I need a session that bypasses the event listener configuration. On Aug 20, 9:45 am, Valeriu Caraulean <[email protected]> wrote: > You have current session in listener. Then: > > private static void Save(IAuditLogEntry auditLogEntry, ISession session) > { > session > .GetSession(EntityMode.Poco) > .Save(auditLogEntry); > > } > On Fri, Aug 20, 2010 at 5:41 PM, Chris J <[email protected]> wrote: > > > I am only aware of the one version of NHibernate in Action, covering > > 1.2. > > > Yes, I reviewed the Audit Log implementation, which was a helpful > > example of how to use event listeners instead of an IInspector > > implementation. However, the piece that I'm curious about, which is > > not covered, it how to use a session within the event listener to > > write a separate record to the database. I don't think it would work > > to use the same session that is being used to perform the write that > > triggered the event. Would it work to create a StatelessSession with > > the same DbConnection as the non-stateless session that triggered the > > event? > > > On Aug 20, 1:33 am, Valeriu Caraulean <[email protected]> wrote: > > > BTW, what version of NH the "NHibernate in Actions" describing? 1.2? Or > > 2.x? > > > > Have you looked at "Audit Log" implementation using event listeners from > > > more recent versions of NH? It may turn to easier and just better > > solution. > > > An example: > >http://nhforge.org/wikis/howtonh/creating-an-audit-log-using-nhiberna... > > > > On Fri, Aug 20, 2010 at 12:57 AM, Chris J <[email protected]> wrote: > > > > > 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/f19ff3332. > > .. > > > > > 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]<nhusers%[email protected]> > > <nhusers%[email protected]<nhusers%[email protected]> > > > > > . > > > > For more options, visit this group at > > > >http://groups.google.com/group/nhusers?hl=en. > > > -- > > 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]<nhusers%[email protected]> > > . > > For more options, visit this group at > >http://groups.google.com/group/nhusers?hl=en. > > -- 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.
