Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

The solution:

S - P = O 

SessionObjects - minus ProjectObjects are Orphans. So everything that is in session but not in project can be deleted. Now our save logic look liks this

...

NHibernate still does cascade on relationships and this can be a problem. For example when a object is reparented. In the sample below object A was a part-of (composition) D1 but it moved to D2. All relationships below are composite. Now if the cascade of the mapping between D1 and A is all NHibernate will delete A because D1 is deleted. This is obviously not what we want because D2 uses A now. This will result in a 'deleted object will be resaved by cascade' exception. To prevent this we need to intercept Nhibernate's deletes and verify that the object really should be deleted. This can be done by checking if the object that NH wants to delete really is a orphan.

Further reading

...