Hi. I posted this same topic on stack overflow but there's no been response as yet and unlikely to be one with the view count so I thought I might try asking here. I have a model with a parent class that holds a collection of subclassed children (using TablePerSubClass inheritance). When attempting to to test cascading deletes by calling delete only on the parent object I get a constraint error between the child table and its joined-subclass table. To demonstrate...
public class ParentMap : ClassMap<Parent> { public ParentMap() { Id(x => x.Id); HasMany(x => x.Children) .Cascade.AllDeleteOrphan() .ForeignKeyCascadeOnDelete() .Inverse(); } } public class ChildMap : ClassMap<Child> { public ChildMap() { Id(x => x.Id); References(x => x.Parent).Not.Nullable(); } } public class ExtendedChildMap : SubclassMap<ExtendedChild> { public ExtendedChildMap() { Map(x => x.extraFeature); } } To test, I'm using NUnit with my testfixture beginning a new transaction for each test setup, and rolling back the transaction for each teardown. With the following test... using (var session = sessionFactory.OpenSession()) { using (var transaction = session.BeginTransaction()) { var p = new Parent(); var c1 = new Child() { Parent = p }; var c2 = new ExtendedChild() { Parent = p }; session.SaveOrUpdate(p); session.SaveOrUpdate(c1); session.SaveOrUpdate(c2); Assert.IsTrue(session.Query<Parent>().Count() == 1); Assert.IsTrue(session.Query<Child>().Count() == 2); Assert.IsTrue(session.Query<ExtendedChild>().Count() == 1); session.Delete(p); Assert.IsTrue(session.Query<Parent>().Count() == 0); }} The test fails on the final assertion with The DELETE statement conflicted with the REFERENCE constraint "FKDB46742824B330ED". The conflict occurred in database "testDB", table "dbo.ExtendedChild", column 'Child_id' If the collection only holds the baseclass Child objects it works as expected, but when a derived ExtendedChild is added the delete doesn't seem to propogate to the baseclass. Feel like I'm missing something obvious here but I've still not managed to solve this after a good while searching. Lastly, I'm also still not 100% clear on the functional differences between Cascade.AllDeleteOrphan and ForeignKeyCascadeOnDelete... or more precisely (ignoring the save/update part) what is the case that the former doesn't handle and requires the latter to be specified? TIA. -- You received this message because you are subscribed to the Google Groups "Fluent NHibernate" group. To unsubscribe from this group and stop receiving emails from it, send an email to fluent-nhibernate+unsubscr...@googlegroups.com. To post to this group, send email to fluent-nhibernate@googlegroups.com. Visit this group at http://groups.google.com/group/fluent-nhibernate. For more options, visit https://groups.google.com/d/optout.