Nhibernate删除对象功能加上数据库触发器抛出StaleStateException

时间:2009-11-16 22:02:05

标签: c# nhibernate

我将描述的设计违反了某种方式的良好实践设计,但我仍然对这个问题出现的原因以及如何绕过这个问题感兴趣。我找到了一些使用NHibernate和Update或Select触发器可能发生的问题的描述,但是我无法找到我面临的问题。

我有一个表和类映射到它,名为Bucket:

public class Bucket
{
  public virtual int Id;
  public virtual int OrderCount;
}

      <class name="Bucket" table="Bucket">
        <id name="Id">
          <generator class="native" />
        </id>
        <property name="OrderCount" />

和班级订单

public class Order
{
  public virtual int Id{get;set;}
  public virtual int BucketId{get;set;}
}


<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                   assembly="..."
                   namespace="...

  <class name="Order" table="Order">
    <id name="Id">
      <generator class="native" />
    </id>
    <property name="BucketId" />
</hibernate-mapping>

还有两个触发器分别在每次插入或删除时按特定存储桶ID计数订单,并在存储桶表中更新存储桶的特定ID的订单数量。

问题是在测试运行期间,如果我删除订单并刷新会话,则抛出以下消息的异常: NHibernate.AdoNet.TooManyRowsAffectedException:意外的行数:2;预期:1

这可能是在删除订单后立即触发执行造成的。

PS: Trigger正在计算订单记录并更新 Read Commited 隔离级别中的Bucket记录。

1 个答案:

答案 0 :(得分:2)

如果您正在使用SQL Server,则触发器中的SET NOCOUNT ON将起作用。