使用NHibernate更新时整数列的并发增量

时间:2011-04-24 19:41:37

标签: sql-server fluent-nhibernate concurrency auto-increment increment

我有一个带有Version数字列的帖子表,用于跟踪每条记录的第n个修订版本。每次更新一行时,我希望其Version数字递增。

目前,我正在增加应用程序逻辑中的列,但由于post.Version += 1;不等同于UPDATE Posts SET Version = Version + 1...,我担心两个并发更新只会导致一个版本增量。

使用手动SQL表达式(如上所述)或更新触发器解决这个问题很容易,但如果可能的话,我宁愿让Fluent NHibernate为我解决这个问题。

使用事务进行更新不会阻止两个同时读取同时看到版本“7”,并且都决定下一个值应该是8.因此,对版本7的两次更新可能会导致值为8,而不是9。

如何设计或映射并发安全的自动递增整数列?

2 个答案:

答案 0 :(得分:4)

它已经融入了NHibernate。检查<version>标签和乐观并发控制上的NH文档。

答案 1 :(得分:1)

为什么要手动管理版本列?

使用NHibernate对乐观并发的支持(参见http://www.nhforge.org/doc/nh/en/index.html#mapping-declaration-version),你将免费获得(以及更正确的行为IMO)