Sorry Michael, my bad, I didn't read your post properly at all.

I believe, as you suggest, that this behaviour only works when the
parent object is deleted, hence the all-delete-orphan option is only
available that way round.

regards,
Jordan


On May 1, 5:00 pm, Michael Charalambous
<[email protected]> wrote:
> Hi Jordan
>
> Thank you for you response. I have tried this and it does not fix the
> issue. From the docs the only valid cascade options for many-to-one are
>
> cascade="all|none|save-update|delete"
>
> Thanks
>
> Michael
>
>
>
>
>
>
>
> On Tuesday, 1 May 2012 16:32:04 UTC+1, Jordan wrote:
>
> > Hi Michael,
>
> > I believe you need to do:
>
> > <many-to-one name ="sequence" cascade="all-delete-orphan" />
>
> > regards,
> > Jordan.
>
> > On May 1, 3:05 pm, Michael Charalambous
> > <[email protected]> wrote:
> > > Hi
> > > I am confused about how NHibernate treats orphan objects and would like
> > > some clarification on this subject. Please see below for my simple test
> > > case. When I run this test case I expect the child object "sequence" to
> > be
> > > deleted from the DB but this isn't the case, instead I am left with an
> > > orphan object. The documentation on many-to-one,
> >http://www.nhforge.org/doc/nh/en/index.html#mapping-declaration-manyt...,
> > > states that the cascade option:
>
> > >      "Specifies which operations should be cascaded from the parent
> > object
> > > to the associated object"
>
> > > To be honest, I'm not sure if this means that my delete scenario is
> > > supported or if the cascade option only comes into play when the parent
> > > object is deleted.
>
> > > So to summarise my questions are:
>
> > >    1. Does NHibernate support many-to-one deletes as in the unit test,
> > and
> > >    if so what is wrong with my test case.
> > >    2. If NHibernate does not support this scenario what is the logic
> > behind
> > >    not supporting it.
> > >    3. If NHibernate does not support this scenario is there a work
> > around
> > >    so child objects can be deleted by their parents from within the
> > domain
> > >    model and be deleted within the DB.
>
> > > Thanks in advance
>
> > > Michael
>
> > > NB. I have also tried using one-to-one and described by Ayende (
> >http://ayende.com/blog/3960/nhibernate-mapping-one-to-one) with the same
> > > results.
>
> > > --------------------------------Class
> > > declarations---------------------------------------------
>
> > > public class Host
> > > {
> > >     public virtual int id { get; set; }
> > >     public virtual Sequence sequence { get; set; }
>
> > > }
>
> > > public class Sequence
> > > {
> > >     public virtual int id { get; set; }
>
> > > }
>
> > > --------------------------------XML
> > > declarations---------------------------------------------
>
> > > <class name="Host">
> > >     <id name="id">
> > >         <generator class="native" />
> > >     </id>
> > >     <many-to-one name ="sequence" cascade="all" />
> > > </class>
>
> > > <class name="Sequence">
> > >     <id name="id">
> > >         <generator class="native" />
> > >     </id>
> > > </class>
>
> > > --------------------------------Unit
> > > Test---------------------------------------------
>
> > > [TestFixture]
> > > public class Fixture : BugTestCase
> > > {
> > >     [Test]
> > >     public void CanDeleteChild()
> > >     {
> > >         Host host = new Host();
> > >         Sequence sequence = new Sequence(); ;
> > >         host.sequence = sequence;
>
> > >         using (var s = OpenSession())
> > >         {
> > >             using (s.BeginTransaction())
> > >             {
> > >                 s.SaveOrUpdate(host);
> > >                 s.Transaction.Commit();
> > >             }
> > >             s.Close();
> > >         }
>
> > >         int sequence_id = sequence.id;
>
> > >         using (var s = OpenSession())
> > >         {
> > >             using (s.BeginTransaction())
> > >             {
> > >                 sequence.host = null;
> > >                 sequence = null;
> > >                 host.sequence = null;
>
> > >                 s.SaveOrUpdate(host);
> > >                 s.Transaction.Commit();
> > >             }
> > >             s.Close();
> > >         }
>
> > >         using (var s = OpenSession())
> > >         {
> > >             Assert.IsNull(s.Get<Sequence>(sequence_id));
> > >             sessions.Close();
> > >         }
> > >     }
>
> > > }

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