I think NHibernate is a great ORM, but I can't help but feel that in
some cases the product forces me to manage persistence issues it could
have dealt with itself.

My biggest gripe at the moment is the case of re-parenting.

For example, I have a parent object with a collection of child objects
and I want to move one of the existing child objects to a different
parent object.

>From a SQL perspective this could be done with the simple update
statement UPDATE ChildTable SET ParentId = DifferentParentId where
ChildId = TheIDOfTheChildToMove.

But Nhibernate refuses to make this easy. From what I can read on the
web, there are 2 solutions.

First solution. Change the HasMany mapping on the parent object to use
CascadeAll. This lets re-parenting work fine, but breaks deletes. How
do we typically delete an object in our models, we set the
ChildObject.Parent reference to null and remove the ChildObject from
the Parent's ChildObjects collection. Now NHibernate de-references the
objects, but the data still remains in the database. Outcome =
Developer has to do database programming by calling session.Delete.

Second solution. Change the HasMany mapping on the parent object to
use CascadeAllDeleteOrphan. Delete works great now. As per the
documentation. amazing. Except, re-parenting breaks. And we get the
stupid object would be resaved exception. To "fix" this the developer
must first "delete" the object from the session and then re-attach it
to the new parent object.

The above solutions invariably require my domain model to have some
knowledge of the underlying data access implementation. This flies in
the face of persistence ignorance which Nhibernate champions in every
other area.

Can someone please explain why this is even considered acceptable?

I can only hope that someone wiser than me has a solution to this.


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