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