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] > <javascript:>>: > > 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] <javascript:>. > > To post to this group, send email to [email protected] > <javascript:>. > > 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.
