TransactionScope has some (OK, a lot of) problems with NHibernate... https://nhibernate.jira.com/browse/NH-3568?jql=labels%20%3D%20TransactionScope
RP On Wednesday, January 7, 2015 4:32:08 PM UTC, Dawid Ciecierski wrote: > > Thank you for your reply. No, we don't explicitly call Save or Flush; > everything is manages automatically: using new TransactionScope() > together with transaction.Complete(). It is indeed the case that Profile is > an entity and not a component. However, I believe that such simple > collection elements would fall under "collection elements" (step 4), while > child entities should be serviced by step 3 + step 5. > > Regards, > Dawid > > On Wednesday, January 7, 2015 2:20:54 PM UTC+1, Oskar Berggren wrote: >> >> Are you calling Save() or similar on the new Profile? >> >> Otherwise, it might be that Profile is an entity and therefore falls >> under step 1 in the list. It's possible that step 5 "all collection >> insertions" really means the relation records in a many-to-many-table. >> >> /Oskar >> >> 2015-01-07 12:04 GMT+01:00 Dawid Ciecierski <[email protected]>: >> > Anyone? :-) Still having this problem and not sure how to proceed. Will >> be >> > grateful for any and all ideas! >> > >> > Regards, >> > Dawid >> > >> > >> > On Thursday, September 11, 2014 6:30:30 AM UTC+2, Dawid Ciecierski >> wrote: >> >> >> >> This is a cross-post from StackOverflow, but doing it only because the >> >> original question did not get much attention (or answers). The >> original post >> >> can be found here; the gist is summarized below. >> >> >> >> According to NHibernate documentation, SQL statements are issued in >> the >> >> following order: >> >> >> >> all entity insertions, in the same order the corresponding objects >> were >> >> saved using ISession.Save() >> >> all entity updates >> >> all collection deletions >> >> all collection element deletions, updates and insertions >> >> all collection insertions >> >> all entity deletions, in the same order the corresponding objects were >> >> deleted using ISession.Delete() >> >> >> >> We have two entities, Client and Profile, where Client owns and is >> solely >> >> responsible for its child collection of Profiles. Client makes use of >> >> versioning. Via session interceptors we ensure that its version field >> is >> >> marked as dirty whenever its child collection changes. According to >> the >> >> above order, when a new Profile is added to Client we should see an >> SQL >> >> UPDATE for Client changing the version, and then an SQL INSERT for the >> new >> >> Profile. However, the following actually happens as observed via >> >> ExpressProfiler: >> >> >> >> SELECT Id, Version >> >> FROM Clients >> >> WHERE Id='3F08F098-09C8-CE42-9594-39C9EAA21B64' >> >> SELECT ClientId, ProductId, Score, Comment >> >> FROM ClientProfiles >> >> WHERE ClientId='3F08F098-09C8-CE42-9594-39C9EAA21B64' >> >> INSERT INTO ClientProfiles (Comment, Score, ClientId, ProductId) >> >> VALUES ('some comment', 123, '3F08F098-09C8-CE42-9594-39C9EAA21B64', >> >> '487BC856-6EAF-42E2-ADD6-B3DE056EA714') >> >> UPDATE Clients SET Version = 46 WHERE Id = >> >> '3F08F098-09C8-CE42-9594-39C9EAA21B64' AND Version = 45 >> >> >> >> The fact that the INSERT happens before the UPDATE is undesirable in >> our >> >> case as the infrastructure expects a StaleObjectStateException in case >> >> optimistic concurrency finds two processes modifying the same data. We >> don't >> >> really see why the order does not seem to follow documentation. Hence >> hoping >> >> that NH masters will have more ideas as to why this is happening! Will >> be >> >> grateful for any and all input that brings us a little closer to a >> solution. >> >> >> >> (Class definitions and mappings can be found on StackOverflow.) >> >> >> >> Regards, >> >> Dawid Ciecierski >> > >> > -- >> > 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 [email protected]. >> > To post to this group, send email to [email protected]. >> > 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 [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/nhusers. For more options, visit https://groups.google.com/d/optout.
