我有多个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增量逻辑,没有这个问题?