NHibernate增量ID生成器在事务中的多个SaveOrUpdates上发生死锁

时间:2013-03-13 10:32:38

标签: nhibernate deadlock increment id-generation

我有多个NHibernate对象(MyClass)在一个循环中持久存在MyTable,一些有更新,一些新插入,所有这些都在一个事务中。对象使用Increment ID生成器,使用简单的Int32作为ID。

在没有启用快照/ Oracle风格逻辑的MS SQL Server上运行。

var trans = session.BeginTransaction();
// ...
foreach(var item in MyClassList)
{
    session.SaveOrUpdate(item);
    session.Flush();
}
// ... some more DB changes
trans.Commit() // or Rollback() in case of error

实现在每个SaveOrUpdate()之后使用立即Flush(),为某些先前的对象发送UPDATE语句。没有环境交易。

当插入发生时,NHibernate打开一个新连接并发送

SELECT max(ID) FROM MyTable

通过单独的连接。此查询通过上一个事务被阻止,甚至将隔离级别设置为ReadUncommitted也无济于事。

任何想法如何使用ID增量逻辑,没有这个问题?

0 个答案:

没有答案