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.
