NHibernate提交期间的ZombieCheck异常

时间:2016-11-08 16:16:52

标签: nhibernate transactions connection zombie-process

我有时(假设每百次提交)在将对象存储到db时会收到以下异常:

NHibernate.HibernateException: error performing isolated work ---> System.InvalidOperationException: This SqlTransaction has completed; it is no longer usable.
       at System.Data.SqlClient.SqlTransaction.ZombieCheck()
       at System.Data.SqlClient.SqlTransaction.Commit()
       at NHibernate.Transaction.AdoNetTransactionFactory.ExecuteWorkInIsolation(ISessionImplementor session, IIsolatedWork work, Boolean transacted)
       --- End of inner exception stack trace ---
       at NHibernate.Transaction.AdoNetTransactionFactory.ExecuteWorkInIsolation(ISessionImplementor session, IIsolatedWork work, Boolean transacted)
       at NHibernate.Transaction.AdoNetWithDistributedTransactionFactory.ExecuteWorkInIsolation(ISessionImplementor session, IIsolatedWork work, Boolean transacted)
       at NHibernate.Engine.TransactionHelper.DoWorkInNewTransaction(ISessionImplementor session)
       at NHibernate.Id.TableGenerator.Generate(ISessionImplementor session, Object obj)
       at NHibernate.Id.TableHiLoGenerator.Generate(ISessionImplementor session, Object obj)
       at NHibernate.Event.Default.AbstractSaveEventListener.SaveWithGeneratedId(Object entity, String entityName, Object anything, IEventSource source, Boolean requiresImmediateIdAccess)
       at NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.SaveWithGeneratedOrRequestedId(SaveOrUpdateEvent event)
       at NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.EntityIsTransient(SaveOrUpdateEvent event)
       at NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.OnSaveOrUpdate(SaveOrUpdateEvent event)
       at NHibernate.Impl.SessionImpl.FireSaveOrUpdate(SaveOrUpdateEvent event)
       at NHibernate.Impl.SessionImpl.SaveOrUpdate(Object obj)

我们正在使用NHibernate 4.0.0.4000。

存储对象的代码是:

        using( ITransaction transaction = session.BeginTransaction() )
        {
            session.SaveOrUpdate( obj );
            transaction.Commit();
        }

现在问题是,对象是半存储的,有些属性已经存储,有些属性没有存储。

有谁知道这种问题?它非常罕见,它只发生在我们的一个客户身上,这使得它很难调试。

感谢。

0 个答案:

没有答案