The flushing behaviour without any modifications is: No Scope: Immediately SessionScope: Auto TransactionScope: Commit
You should add flush="auto" to your ActiveRecord configuration: <activerecord flush="auto"> <config> <add key="connection.driver_class" value="NHibernate.Driver.SqlClientDriver" /> <add key="dialect" value="NHibernate.Dialect.MsSql2005Dialect" /> <add key='proxyfactory.factory_class' value='NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle' /> <add key="connection.provider" value="NHibernate.Connection.DriverConnectionProvider" /> <add key="connection.connection_string" value="Data Source=.;Initial Catalog=Test;Integrated Security=SSPI" /> </config> </activerecord> This is exactly your required behaviour. -Markus 2009/6/10 Alex Scordellis <[email protected]> > > This seems to be related to the following topics on the dev list, but > I can't follow those threads to a complete conclusion that would > answer my question > > > http://groups.google.com/group/castle-project-devel/browse_thread/thread/1707d8cdeecc3869/94a577f3d9eb4114?lnk=gst&q=flush#94a577f3d9eb4114 > > http://groups.google.com/group/castle-project-devel/browse_thread/thread/ba6c3963f7c4532b/fd3171b7f32d79f9?lnk=gst&q=flush#fd3171b7f32d79f9 > > 2009/6/10 Alex Scordellis <[email protected]>: > > I have found that the session is not flushed before I perform a query > > using the criteria API, meaning that new objects for which I just > > called ActiveRecordMediator.Save are not returned by the query. I > > understand why this is (the INSERT is not performed until we flush the > > session), but > > a) it's surprising for most people. I understood that sessions got > > flushed automatically before each query. > > b) if I change the primary key of the type to PrimaryKeyType.Identity, > > this forces the Save to perform the INSERT to get the DB generated PK > > value, so the second query does return the new object > > > > This was happening when I used a TransactionScope(TransactionMode.New, > > IsolationLevel.ReadCommitted, OnDispose.Commit). With the latest trunk > > code I can fix it by using a SessionScope(FlushAction.Auto). I tried > > various other combinations of transactions and sessions and couldn't > > find one where I had a transaction and had an auto flushing session. > > What is the right scope construction to give me what I want? > > > > I'm also worried by point (b), since a change to the code that isn't > > visible from the point where I'm making the query is going to affect > > the query results. Because the change is not locally visible, it's > > going to be pretty tricky to track down bugs caused by this. > > > > You can see tests that exhibit this behaviour here > > > http://github.com/alexscordellis/nh-ar-oddities/blob/bf7d248b08394a1a8e2140c91112239dc5b6f045/NHOddities/FindingRecentlySavedEntitiesWithAQuery.cs > > You'll see examples with both types of primary key and with various > > types of session scope. > > > > All this behaviour is against a trunk build of Active.Record. My > > current project is using an older build (r5380), which is even worse > > as SessionScope(FlushAction.Auto) doesn't fix it. See > > wont_find_stuff_just_saved_without_flush_with_flush_mode_auto in > > > http://github.com/alexscordellis/nh-ar-oddities/blob/c2ee96d334a89429e41342eec47675d882cf65d2/NHOddities/QueryUsingUnsavedEntity.cs > > > > Thanks for your help, > > > > Alex > > > > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Castle Project Users" 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/castle-project-users?hl=en -~----------~----~----~----~------~----~------~--~---
