I have JUST TRIED using the code in my previous email with guid.comb and it DOES WORK (but only if you flush explicitly)
Diego On Wed, May 26, 2010 at 04:40, deejbee <[email protected]>wrote: > I ended up abandoning using guidcomb for the audit table as i think > there's a bug when using them. > > When using an Identifier as the PK on the Audit table instead, this > definately worked. Note you don't need to Flush() as was mentioned in > the docs. > > > On May 25, 2:54 pm, Diego Mijelshon <[email protected]> wrote: > > You are right, I just tried and it didn't save. > > Try the following: > > > > public void OnPostInsert(PostInsertEvent e) > > { > > if (e.Entity is Audit) return; > > var audit = new Audit{...}; > > var childSession = e.Session.GetSession(EntityMode.Poco); > > childSession.Save(audit); > > childSession.Flush(); > > } > > > > Diego > > > > On Tue, May 25, 2010 at 09:49, deejbee <[email protected] > >wrote: > > > > > > > > > Yes, it's committing. I've sort of got round this issue by using an > > > Identity column instead of a GuidComb as it was suggested in another > > > post that this might be the issue. However I found that the > > > PostInsertEvent was then being fired again (until a stack overflow) > > > but this time with the Audit entity being passed in. I got round this > > > by checking that the type of the entity, only creating an Audit object > > > if it was not. > > > > > It still doesn't feel quite right as I thought the chilt session > > > shouldn't cause the event to fire again. > > > > > On May 25, 12:36 pm, Diego Mijelshon <[email protected]> wrote: > > > > Are you committing the parent transaction? > > > > > > Diego > > > > > > On Tue, May 25, 2010 at 05:06, deejbee < > [email protected] > > > >wrote: > > > > > > > Thanks Diego, I tried what you suggested (it makes perfect sense) > but > > > > > it doesn't insert the Audit record. I can see the Audit recordt in > > > > > the child session but it doesn't commit. I've tried using the > various > > > > > FlushMode options but they don't seem to make any difference > either. > > > > > > > Any suggestions? > > > > > > > On May 25, 2:28 am, Diego Mijelshon <[email protected]> > wrote: > > > > > > I suggest that you use IPost* events for auditing. > > > > > > And use a child session for saving. Example: > > > > > > > > public class AuditEventListener : IPostInsertEventListener > > > > > > { > > > > > > public void OnPostInsert(PostInsertEvent e) > > > > > > { > > > > > > var audit = new Audit > > > > > > { > > > > > > CreatedBy = ... > > > > > > ... > > > > > > }; > > > > > > e.Session.GetSession(EntityMode.Poco).Save(audit); > > > > > > } > > > > > > > > } > > > > > > > > Diego > > > > > > > > On Mon, May 24, 2010 at 11:38, deejbee < > > > [email protected] > > > > > >wrote: > > > > > > > > > I'm implementing auditing of inserts so I've implemented > > > > > > > IPreInsertEventListener and it's firing as I would expect > however > > > I'm > > > > > > > trying to create a new Audit record in the same database with > > > details > > > > > > > of the record that was originally being created (via > > > SaveAndFlush()). > > > > > > > > > An exception "Collection was modified; enumeration operation > may > > > not > > > > > > > execute." is being thrown and the transaction is rolled back. > I > > > tried > > > > > > > creating a child session for the audit record but that didn't > seem > > > to > > > > > > > make any difference. Does anyone have an example how to do > this or > > > > > > > what I might be doing wrong? > > > > > > > > > public bool OnPreInsert(PreInsertEvent e) > > > > > > > { > > > > > > > > > Audit audit = new Audit(); > > > > > > > audit.CreatedBy = "somename"; > > > > > > > audit.CreatedDateTime = DateTime.Now; > > > > > > > <<others snipped>> > > > > > > > > > audit.Save(); > > > > > > > > > return false; > > > > > > > } > > > > > > > > > Many Thanks > > > > > > > > > -- > > > > > > > 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]> > > > > > <nhusers%[email protected]<nhusers%[email protected]> > <nhusers%[email protected]<nhusers%[email protected]> > > > > > > > > > <nhusers%[email protected]<nhusers%[email protected]> > <nhusers%[email protected]<nhusers%[email protected]> > > > > > <nhusers%[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]> > <nhusers%[email protected]<nhusers%[email protected]> > > > > > <nhusers%[email protected]<nhusers%[email protected]> > <nhusers%[email protected]<nhusers%[email protected]> > > > > > > > > > . > > > > > > For more options, visit this group athttp:// > > > > > 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]> > <nhusers%[email protected]<nhusers%[email protected]> > > > > > <nhusers%[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]> > <nhusers%[email protected]<nhusers%[email protected]> > > > > > . > > > > For more options, visit this group athttp:// > > > 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]> > <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 athttp:// > 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.
