Ok -- Fabio Maulo
El 02/09/2010, a las 20:57, Filip Zawada <[email protected]> escribió: > I posted a message on nhusers but no-one replied. Maybe this > group is a better choice since the post is related to the internals of NH. > The main reason I'm putting it here is that I think the described behavior is > a bug, and I would like to first confirm it here before creating a JIRA > ticket. > > > > I'm trying to implement an IPostInsert/UpdateEventListener. What I > want to achieve is sending two SQL update queries: > > > void IPostUpdateEventListener.OnPostUpdate(PostUpdateEvent @event) > { > /* > * Getting left and right ommited > */ > @event.Session.CreateSQLQuery("update categories c set > isbranchactive = 1 where c.lft >= :lft and c.rgt <= :rgt") > .SetInt64("lft", left) > .SetInt64("rgt", right) > .ExecuteUpdate(); > > } > > Nothing special. The problem is it blows up when commiting a > transaction: > > [InvalidOperationException: Collection was modified; enumeration > operation may not execute.] > System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource > resource) +56 > System.Collections.Generic.Enumerator.MoveNextRare() +58 > System.Collections.Generic.Enumerator.MoveNext() +93 > NHibernate.Engine.ActionQueue.ExecuteActions(IList list) +149 > NHibernate.Engine.ActionQueue.ExecuteActions() +32 > > NHibernate.Event.Default.AbstractFlushingEventListener.PerformExecutions(IEventSource > session) +253 > > NHibernate.Event.Default.DefaultFlushEventListener.OnFlush(FlushEvent > event) +97 > NHibernate.Impl.SessionImpl.Flush() +275 > NHibernate.Transaction.AdoTransaction.Commit() +236 > > I looked into the ExecuteActions(...) and replaced foreach enumeration > with a regular for loop. > Everything seems to work just fine. NH tests are passing (tested on 2.1.2). > > Now my question is: is the original behavior a bug. If yes, then is > the proposed solution acceptable? > > I need this order of execution and cannot use Pre* Listeners > > Thanks, > Filip
