I have a question about version stamping I can't quite wrap my head
around
Say I create column "Version" in my table in the DB.
I configure my nhibernate nhm.xml to use that as versioning check and
set my optimistic-lock="version"
Does this not mean that only nhibernate keeps incrementing the number
in the row.
So if I fire up anything that is not nhibernate controlled and alter
the row, the version number will not get incremented? Doesn't that
defeat the purpose of version locking?

On Jun 3, 1:05 pm, Oskar Berggren <[email protected]> wrote:
> A paragraph in section 5.1.3 of the reference also relates to this:
>
> "We very strongly recommend that you use version/timestamp columns for
> optimistic locking with NHibernate. This is the optimal strategy with
> respect to performance and is the only strategy that correctly handles
> modifications made outside of the session (ie. when ISession.Update()
> is used). Keep in mind that a version or timestamp property should
> never be null, no matter what unsaved-value strategy, or an instance
> will be detected as transient."
>
> /Oskar
>
> 2012/6/2 Michael Abraham <[email protected]>:
>
>
>
>
>
>
>
> > When you use dynamic-update="true" optimistic-lock="all", NH will issue an
> > update like
>
> > update <table> set <col1>=<newval1>, <col2>=<newval2>, ... where
> > <idcol>=<idval> and <col1>=<oldval1> and <col2>=<oldval2>.
>
> > <col1>, <col2>, ... are the columns that NH thinks you have modified from
> > their original values.  If the instance is attached, that works.  But if the
> > instance is detached, NH has no way to figure out the original values of the
> > columns.  So you also need select-before-update.  That causes a select (to
> > get the "original" values) before the update, but that select happens after
> > you have made your change via SSMS.  One option would be to reattach the
> > instance before updating it with the new values in the grid, e.g., doing
> > someting like session.Lock(instance, LockMode.None) (I may have the syntax
> > wrong).  If you don't need to use dynamic-update, you might be better off
> > using a timestamp column for concurrency control.
>
> > Mike
>
> > On Friday, June 1, 2012 8:05:49 AM UTC-4, imonsei wrote:
>
> >> I have defined a class, and set
>
> >> dynamic-update="true" optimistic-lock="all" select-before-
> >> update="true"
>
> >> in my tabledefiniton hbm.xml file.
> >> I start my program and load my data in displaying it in a
> >> datagridview.
> >> Next I load up sql management studio (mssql2008 express), connect to
> >> the database, and alter an entry in the table i have just loaded into
> >> the program.
> >> Meanwhile in the program I make sure the change has not propergated
> >> into the datagridview.
> >> Now I change something in the row I had altered with sql management
> >> studio.
> >> I save my change from the datagridview to the database.
>
> >> What I expected was an exception being thrown by the program, but
> >> instead I find that the change I made with sql management studio has
> >> been overwritten completely with the other data from my program.
>
> >> Can anyone take a stab at where I go wrong?
> >> PS. just say and I'll post the code I use, if you need it.
>
> > --
> > You received this message because you are subscribed to the Google Groups
> > "nhusers" group.
> > To view this discussion on the web visit
> >https://groups.google.com/d/msg/nhusers/-/HOscx0WG0i8J.
>
> > 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.

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