NHibernate更新列=列-1

NHibernate更新列=列-1,nhibernate,Nhibernate,我无法在nhibernate的上下文中执行以下更新 using(ITransaction transaction = session.BeginTransaction()) { // FIRST I'm GETTING A LIST OF ITEMS IN A MANNER LIKE THIS var itemsToDelete = session.QueryOver<Item>() .Where(

我无法在nhibernate的上下文中执行以下更新

using(ITransaction transaction = session.BeginTransaction())
{
    // FIRST I'm GETTING A LIST OF ITEMS IN A MANNER LIKE THIS
    var itemsToDelete = session.QueryOver<Item>()
                                   .Where(i => i.ReferenceObject.Id == otherIdValue)
                                   .List<Item>();

    // THEN I"M LOOPING THROUGH THEM
    for(itemToDelete in itemsToDelete)
    {

        session.Delete(itemToDelete);

        using (iDB2Command command = (iDB2Command)_session.Connection.CreateCommand())
        {
            command.CommandText = "update TABLE_NAME set sequence = (sequence - 1) where id = @someId and sequence > @sequenceNumberDeleted";
            command.DeriveParameters();
            command.Parameters["@someId"].Value = idValue;
            command.Parameters["@sequenceNumberDeleted"].Value = itemToDelete.Sequence;
        }
    }

    transaction.commit()
}
使用(ITransaction transaction=session.BeginTransaction())
{
//首先,我以这样的方式得到一个项目列表
var itemsToDelete=session.QueryOver()
.Where(i=>i.ReferenceObject.Id==otherIdValue)
.List();
//然后我在他们之间循环
for(itemsToDelete中的itemToDelete)
{
删除(itemToDelete);
使用(iDB2Command=(iDB2Command)\ u session.Connection.CreateCommand())
{
command.CommandText=“更新表\u名称集序列=(序列-1),其中id=@someId和sequence>@sequenceNumberDeleted”;
command.DeriveParameters();
command.Parameters[“@someId”].Value=idValue;
command.Parameters[“@sequenceNumberDeleted”].Value=itemToDelete.Sequence;
}
}
commit()事务
}
问题似乎出在sequence=(sequence-1)上。每次调用该例程时,NHibernate都会抛出一个“意外的行计数”“例外。在研究大多数与此异常相关的文章时,我发现是由于表上的触发器更新了其他行引起的。在这种情况下,表上没有任何触发器。此外,如果我替换了sequence=5或其他常量,那么update语句执行时不会出现任何问题

DATE TIME [10] ERROR App.Controllers.AController - Unexpected row count: 2; expected: 1
DATE TIME [10] ERROR App.Controllers.AController -    at NHibernate.AdoNet.Expectations.BasicExpectation.VerifyOutcomeNonBatched(Int32 rowCount, IDbCommand statement)
   at NHibernate.AdoNet.NonBatchingBatcher.AddToBatch(IExpectation expectation)
   at NHibernate.Persister.Entity.AbstractEntityPersister.Delete(Object id, Object version, Int32 j, Object obj, SqlCommandInfo sql, ISessionImplementor session, Object[] loadedState)
   at NHibernate.Persister.Entity.AbstractEntityPersister.Delete(Object id, Object version, Object obj, ISessionImplementor session)
   at NHibernate.Action.EntityDeleteAction.Execute()
   at NHibernate.Engine.ActionQueue.Execute(IExecutable executable)
   at NHibernate.Engine.ActionQueue.ExecuteActions(IList list)
   at NHibernate.Engine.ActionQueue.ExecuteActions()
   at NHibernate.Event.Default.AbstractFlushingEventListener.PerformExecutions(IEventSource session)
   at NHibernate.Event.Default.DefaultFlushEventListener.OnFlush(FlushEvent event)
   at NHibernate.Impl.SessionImpl.Flush()
   at NHibernate.Transaction.AdoTransaction.Commit()
   at App.Controllers.AController.AMethod(Int32[] otherIdValues, Int32 someIdValue, String someReferenceValue) in    <path>\App\Controllers\AController.cs:line 117
DATE-TIME[10]错误App.Controllers.AController-意外的行计数:2;预期:1
日期时间[10]错误App.Controllers.AController-位于NHibernate.AdoNet.expections.basicexpection.verifyoutcomenonbatch(Int32 rowCount,IDbCommand语句)
在NHibernate.AdoNet.NonBatchingBatcher.AddToBatch(预期期望值)
在NHibernate.Persister.Entity.AbstractEntityPersister.Delete(对象id、对象版本、Int32 j、对象obj、SqlCommandInfo sql、ISessionImplementor会话、对象[]loadedState)
在NHibernate.Persister.Entity.AbstractEntityPersister.Delete(对象id、对象版本、对象obj、ISessionImplementor会话)
在NHibernate.Action.EntityDeleteAction.Execute()处
在NHibernate.Engine.ActionQueue.Execute(IExecutable可执行文件)处
在NHibernate.Engine.ActionQueue.ExecuteActions(IList列表)中
在NHibernate.Engine.ActionQueue.ExecuteActions()处
位于NHibernate.Event.Default.AbstractFlushingEventListener.PerformExecutions(IEventSource会话)
在NHibernate.Event.Default.DefaultFlushEventListener.OnFlush(FlushEvent事件)
在NHibernate.Impl.SessionImpl.Flush()处
在NHibernate.Transaction.AdoTransaction.Commit()处
在\App\Controllers\AController.cs中的App.Controllers.AController.AMethod(Int32[]otherIdValues,Int32 someIdValue,String someReferenceValue)处:第117行
有人能帮我指出正确的方向吗

编辑: 迭戈说得很对。这就是我匆匆忙忙得到的。
对该代码的实际调用在一个事务中,然后我对该事务调用commit。

我找到了问题的原因。实际的语句并不像我想象的那样按顺序生成。相反,update命令是在delete命令之前执行的,因此delete命令引发了意外的行计数异常,而不是我以前认为的update命令。

我没有看到正在执行的命令、正在刷新的会话、异常的实际堆栈跟踪或引发的行。。。