批量更新从更新中返回了意外的行数;实际行数:0;预期:使用 NHibernate 进行删除操作时为 1

Batch update returned unexpected row count from update; actual row count: 0; expected: 1 when delete operation using NHibernate

我在c#中使用NHibernate并执行删除操作: 我的问题是,当我在 'PC1' 上由 'A' 用户登录并在 'PC2' 上由同一用户登录时,因为我没有提供。该用户的会话 2 并删除一个

record from 'PC1' record deleted successfully, 但是当相同的记录从 'PC2' delete without refresh page.then 时,出现如下异常:

"Batch update returned unexpected row count from update; actual row count: 0; expected: 1"

我的代码是:

public void Delete(object instance)
        {
            using(NHSession.BeginTransaction())
            {
                NHSession.Delete(instance);
                NHSession.Transaction.Commit();
            }
        }

这里-

NHSession.Transaction.Commit();当我从 'PC2' 中删除时,这一行出错。 所以在这里如何使用 NHibernate 处理这个问题。 执行完这个make sql查询后如下:

DELETE FROM [Employee].[dbo].Employee_Master WHERE EmpID = @p0;@p0 = d3b9df34-97c6-450a-a570-a62000dd5125 [Type: Guid (0)]

当相同的查询在 sql Studio 中执行时,它 return 跟随 o/p:

(0 行受影响)

这是由于处理事务或分离实体的奇怪方式造成的。当您避免直接删除分离的实体时,它不会发生。

我不知道为什么你的交易是这样的。

要么您应该从某个更高层开始事务(永远不要在数据访问层内管理事务), 或者您直接从客户端获取对象并将其作为附加实例加载。在这种情况下,您应该只从客户端而不是分离实例获取 id:

public void DeleteUserSession(Guid id)
{
    using(NHSession.BeginTransaction())
    {
      var instance = NHSession.Get(typeof(UserSession), id);
      if (instance != null)
      {
        NHSession.Delete(instance);
      }
      NHSession.Transaction.Commit();
    }
}