Do you have another property on Person that can be changed explicitly instead, perhaps a ModifiedOn timestamp, thereby triggering version increment?
2015-09-25 16:27 GMT+02:00 Peter V <pvhey...@gmail.com>: > But is there an elegant way to just force NHibernate to update the version > number of both toPerson and fromPerson when TransferProperty is called? > > Locking fromPerson as dirty doesn't do it (I guess because nothing > actually changed), and I'm trying to avoid modifying the class mapping (the > regression test effort of doing so would be huge because there is so much > other code that references it). > > Thanks, > Peter > > > > > > On Friday, September 25, 2015 at 1:35:40 AM UTC-4, Gunnar Liljas wrote: >> >> It is removed from toPerson as a side effect since the collection is >> mapped as inverse, and you change the Owner. But NHibernate has no way of >> knowing this. >> >> Since Property really seems to be a full blown entity, maybe you can >> handle deletions of it explicity (with session.Delete), and thereby be able >> to set the cascade to not delete orphans. >> >> 2015-09-25 0:16 GMT+02:00 Peter V <pvhe...@gmail.com>: >> >>> Thanks, that's definitely a solution. >>> But I'd prefer not to have to clone it if there's another way -- my >>> actual Property class is a lot more complex than what I've shown here, and >>> cloning it may introduce some other issues. >>> >>> The thing is, even with RemoveProperty commented out, the property is >>> getting removed from fromPerson. >>> So I don't understand why the version of fromPerson isn't incremented. >>> >>> Peter >>> >>> >>> >>> On Thursday, September 24, 2015 at 5:15:42 PM UTC-4, Gunnar Liljas wrote: >>>> >>>> With RemoveProperty commented out, nothing is done with fromPerson, >>>> hence no version increment. >>>> >>>> I'm guessing the cascade "deletes" the property. >>>> >>>> Maybe instead of transferring you could remove the property from >>>> fromPerson and add a cloned property to toPerson. >>>> >>>> >>>> >>>> 2015-09-24 20:37 GMT+02:00 Peter V <pvhe...@gmail.com>: >>>> >>>>> I have the following NHibernate mapping: >>>>> >>>>> <class name="Person" proxy="Person" table="Person_"> >>>>> >>>>> <id name="OID" column="OID_" type="Guid"> >>>>> <generator class="guid.comb"/> >>>>> </id> >>>>> >>>>> <version name="Version" column="Version_"/> >>>>> >>>>> <set name="Properties" lazy="true" inverse="true" >>>>> cascade="all-delete-orphan"> >>>>> <key column="PersonOID_"/> >>>>> <one-to-many class="Property"/> >>>>> </set> >>>>> >>>>> </class> >>>>> >>>>> >>>>> And the following C# code: >>>>> >>>>> public class Property >>>>> { >>>>> public Person Owner; >>>>> } >>>>> >>>>> public class Person >>>>> { >>>>> private ISet _properties; >>>>> >>>>> public void AddProperty(Property property) >>>>> { >>>>> property.Owner = this; >>>>> _properties.Add(property); >>>>> } >>>>> >>>>> public void RemoveProperty(Property property) >>>>> { >>>>> property.Owner = null; >>>>> _properties.Remove(property); >>>>> } >>>>> } >>>>> >>>>> ... >>>>> >>>>> public void TransferProperty(Property p, Person fromPerson, Person >>>>> toPerson) >>>>> { >>>>> //fromPerson.RemoveProperty(p); >>>>> toPerson.AddProperty(p); >>>>> } >>>>> >>>>> >>>>> A call to TransferProperty results in the entity version for toPerson >>>>> getting incremented, but no change to the entity version for fromPerson. >>>>> >>>>> This is causing me a problem when multiple users call TransferProperty >>>>> at the same time -- because fromPerson version doesn't change, there is no >>>>> PersistenceException thrown when two users try to transfer property from >>>>> the same person at the same time. >>>>> >>>>> Any thoughts on the best way to modify this code so that calling >>>>> TransferProperty will increment the entity versions for both toPerson and >>>>> fromPerson??? >>>>> >>>>> Thanks in advance! >>>>> Peter >>>>> >>>>> P.S. I commented out the RemoveProperty call in TransferProperty, >>>>> because it was resulting in "ObjectDeletedException: deleted object would >>>>> be re-saved by cascade (remove deleted object from associations)". >>>>> >>>>> -- >>>>> You received this message because you are subscribed to the Google >>>>> Groups "nhusers" group. >>>>> To unsubscribe from this group and stop receiving emails from it, send >>>>> an email to nhusers+u...@googlegroups.com. >>>>> To post to this group, send email to nhu...@googlegroups.com. >>>>> Visit this group at http://groups.google.com/group/nhusers. >>>>> For more options, visit https://groups.google.com/d/optout. >>>>> >>>> >>>> -- >>> You received this message because you are subscribed to the Google >>> Groups "nhusers" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to nhusers+u...@googlegroups.com. >>> To post to this group, send email to nhu...@googlegroups.com. >>> Visit this group at http://groups.google.com/group/nhusers. >>> For more options, visit https://groups.google.com/d/optout. >>> >> >> -- > You received this message because you are subscribed to the Google Groups > "nhusers" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to nhusers+unsubscr...@googlegroups.com. > To post to this group, send email to nhusers@googlegroups.com. > Visit this group at http://groups.google.com/group/nhusers. > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "nhusers" group. To unsubscribe from this group and stop receiving emails from it, send an email to nhusers+unsubscr...@googlegroups.com. To post to this group, send email to nhusers@googlegroups.com. Visit this group at http://groups.google.com/group/nhusers. For more options, visit https://groups.google.com/d/optout.