1
2
嗯,我在这里没有很多经验,但有一件事我记得读过 in the documentation 如果发生异常,您应该立即回滚事务并释放会话。也许您的问题与会话处于不一致状态有关? 另外,在您的代码中调用更新是 not necessary . 因为您在该会话中加载了对象,所以nhibernate已经在跟踪它。 |
2
1
如果您仍然想进行更改,那么为什么还要麻烦行版本控制呢?如果您总是简单地更新数据并让最后一个事务获胜,那么听起来您应该得到相同的结果。 至于为什么更新会成为永久性的,这取决于版本检查/更新的SQL语句是什么样子的,以及您的事务控制,这是您在代码示例中遗漏的。如果打开Hibernate SQL日志记录,则很可能会发现这是如何发生的。 |
3
0
我不是一个无血气的古鲁,但答案似乎很简单。 当nhibernate加载一个对象时,它希望只要它在nhibernate会话缓存中,就不会在db中发生更改。 正如你提到的-你有多线程应用程序。 这就是发生的事情=>
您缺少锁定机构。对于如何正确、优雅地应用这一点,我们说不出多少。也许吧
当我们同时使用nhibernate和raw ado.net时,也遇到了类似的问题(幸运的是,仅用于查询,至少用于生产代码)。我们所要做的就是在插入/更新时强制更新数据库,这样我们就可以通过全文搜索来查询某些特定的实体。
有
|
4
0
|
Duvan · 将逗号(,)替换为点(.)[副本] 2 年前 |
Mateen Bagheri · 选择表的计数并选择其自身 2 年前 |
SoT · SQL Server中求和函数的工作方式 2 年前 |
NKAT · 将列值聚合到列表中会产生错误 2 年前 |
deanpillow · 返回两列中有一个匹配值的记录 2 年前 |
snowflakes74 · 在Dapper中异步查询多个结果 2 年前 |