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
-~----------~----~----~----~------~----~------~--~---

Reply via email to