This should work fine: 1) You load parent and all associated childs in non-flushing sessionscope. 2) More childs are added. No one calls save or something, so new childs are still transient. 3) On Save-button pressed, call save on parent and cascade changes to child. 4) On Cancel-button presses, discard the sessionscope and reload object in a new one.
If you are using IDENTITY PKs, don't call save on childs, but rely on cascading instead! Saving them adds them to the DB instantly, regardless of flushing behaviour! -Markus 2009/1/13 Greg Burri <greg.bu...@gmail.com>: > > Hi, > I use nHibernate with ActiveRecord in a such manner : > * I have a global session of type 'TransactionScope' > * When the user want to save his work his click on "file -> save" > of the application menu. This action will execute a such code : > globalSession.VoteCommit(); > globalSession.Dispose(); > globalSession = new TransactionScope(); > > > Basically I have a dialog to edit an object 'p' of class 'Parent' > which owns some objects 'c' of class 'Child'. Both of theses classes > deriving from 'ActiveRecordLinqBase'. > > When the user choose 'Cancel' from the dialog after editing some > values of 'a' and adding or removing some B objects I want to reverse > theses changes (that is remove 'Child' objects that was added and add > removed 'Child' objects). > > (Case 1) If I use the method "p.Refresh()" there will be an exception > like "No row with the given identifier exists[Child#0]" in the case > the user added some 'c'. > (Case 2) If I use a transaction with "p.SaveAndFlush()" + > "t.VoteRollBack()" + "t.Dispose()" then this error will be throwed : > "Illegal attempt to associate a collection with two open > sessions" (for the same case above, where a 'b' is added). > > Is my approach is good ? Or it's a misusing of nHibernate and > ActiveRecord ? > > I have uploaded a little sample project here : > http://www.gburri.org/bordel/ActiveRecordLifecycle.zip. If you want to > run it you need PostgreSQL or change the 'app.config'. > This sample will create a parent and some children attached to it at > launch. > You can edit the 'Parent' object and change its state with the button > "Change state" and try to undo the modifications with "Cancel". > > Here are some additional information about my configuration : > > nHibernate version: 2.1.0.1001 > Active record version: 1.0.3.0 > Database: PostgreSQL 8.3 > > Thanks in advance. > > /Greg > > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Castle Project Users" group. To post to this group, send email to castle-project-users@googlegroups.com To unsubscribe from this group, send email to castle-project-users+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/castle-project-users?hl=en -~----------~----~----~----~------~----~------~--~---