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 view this discussion on the web visit https://groups.google.com/d/msg/nhusers/-/oxDA5FoQRjcJ. 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.
