使用 NHibernate 更新时整数列的并发增量
Posted
技术标签:
【中文标题】使用 NHibernate 更新时整数列的并发增量【英文标题】:Concurrent incrementation of integer column on update with NHibernate 【发布时间】:2011-08-11 23:32:15 【问题描述】:我有一个带有 Version
数字列的 Posts 表,用于跟踪每条记录的第 n 次修订。每次更新一行时,我希望其 Version
编号增加。
目前,我正在增加应用程序逻辑中的列,但因为post.Version += 1;
不等于UPDATE Posts SET Version = Version + 1...
,我担心两个并发更新只会导致一个版本增加。
使用手动 SQL 表达式(如上)或更新触发器很容易解决这个问题,但如果可能的话,我宁愿让 Fluent NHibernate 为我处理这个问题。
使用事务进行更新不会阻止两个同时读取都看到版本“7”,并且都决定下一个值应该是 8。因此,对版本 7 的两次更新可能会导致值 8,而不是9 个。
如何设计或映射并发安全的自动递增整数列?
【问题讨论】:
或许这个话题也值得一查,相关:***.com/questions/18362228/… 【参考方案1】:它已经融入 NHibernate。查看<version>
标签和乐观并发控制上的 NH 文档。
【讨论】:
+1 谢谢!我在 Fluent NHibernate 中找到了Version(x => x.Version);
映射 :)
领先我几秒钟 :-)【参考方案2】:
为什么要手动管理版本列?
使用 NHibernate 对乐观并发的支持(请参阅 http://www.nhforge.org/doc/nh/en/index.html#mapping-declaration-version),您将免费获得它(以及更正确的行为 IMO)
【讨论】:
谢谢(我是 NHibernate 的新手)。我不知道我是如何使用 LINQ-to-SQL 的?!以上是关于使用 NHibernate 更新时整数列的并发增量的主要内容,如果未能解决你的问题,请参考以下文章
自动增量(身份)在 Fluent NHibernate 中不起作用
如何绕过 NHibernate 版本控制更新 SQL 中的记录