Hmm, not what I was hoping for! Will have to add some logic in the domain entity to re-use the existing objects and update those, maybe... :S
anyway, thanks Mike! At least confirmation I'm not going mad ;) 2009/4/1 Mike Nichols <[email protected]> > > The only way I've ever gotten around this is doing a manual flush, but > usually I can refactor to have the actions be in different > transactions to order things correctly. > > On Apr 1, 10:48 am, James Crowley <[email protected]> wrote: > > Just realised the issue is to do with the unique constraint. NHibernate > > seems to be trying to delete the child object *after* doing the insert > for > > the new child... but because it has the same unique key elements, you > break > > the unique constraint. > > > > Is there a way to force NHibernate to do the deletes first? > > > > Thanks > > > > James > > > > 2009/4/1 James Crowley <[email protected]> > > > > > > > > > I have a parent object which has a one to many relationship with an > ISet of > > > child objects. When deleting a child object, *everything works fine*. > But > > > when deleting a child object *and* adding a new child object in the > same > > > transaction, the first child is not deleted. > > > > > I have the following in the parent object: > > > > > <set name="Pages" inverse="true" cascade="all-delete-orphan" > access="field.camelcase-underscore"> > > > > > <key column="ContentId" /> > > > > > <one-to-many class="DeveloperFusion.Domain.Entities.ContentPage, > DeveloperFusion.Domain, Version=1.0.0.0, Culture=neutral, > PublicKeyToken=null" /> > > > </set> > > > > > My code is as follows: > > > > > Content content = contentRepository.Get(1); > > > > > content.Pages.Clear(); > > > //--- > > > //If I un-comment this, everything works as expected > > > //NHibernateSession.Current.Flush(); > > > //--- > > > > > content.Pages.Add(new ContentPage("Some new title", 1, "Some content") > }); > > > NHibernateSession.Current.Update(content); > > > NHibernateSession.Current.Flush(); > > > > > basically no delete statement is being executed for the page element > that > > > has been removed. However, if I don't combine the adding and the > deleting > > > (by uncommenting the Flush() statement) everything works fine. > > > > > What am I missing??? > > > > > Thanks > > > > > James > > > > -- > > James Crowley > > Managing Director > > Developer Fusion - Connecting developers worldwide > > > > Developer Fusion Ltd | 58 Sandringham Close | Enfield, EN1 3JH > > mob: 07986 624128 web:http://www.developerfusion.com/ > > > -- James Crowley Managing Director Developer Fusion - Connecting developers worldwide Developer Fusion Ltd | 58 Sandringham Close | Enfield, EN1 3JH mob: 07986 624128 web: http://www.developerfusion.com/ --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
