C# 删除后Nhibernate意外的行计数上升

C# 删除后Nhibernate意外的行计数上升,c#,nhibernate,rowcount,C#,Nhibernate,Rowcount,问题: var queueEntry = _session.Query<MyTable>().FirstOrDefault(x => x.Id == id); if (queueEntry != null) { _session.Delete(queueEntry); try { _session.Flush(); } catch (Exception ex) { _session.Clear()

问题:

var queueEntry = _session.Query<MyTable>().FirstOrDefault(x => x.Id == id);
if (queueEntry != null)
{
    _session.Delete(queueEntry);

    try
    {
        _session.Flush();
    }
    catch (Exception ex)
    {
        _session.Clear();
    }

    return 1;
}
我得到一个错误:

批更新从更新返回意外的行计数;实际行 计数:0;预期:1

在获取和删除之间删除某个实体时。在任何下一次删除后,行计数和预期值都会上升,例如:

批更新从更新返回意外的行计数;实际行 计数:11;预期:12

代码:

var queueEntry = _session.Query<MyTable>().FirstOrDefault(x => x.Id == id);
if (queueEntry != null)
{
    _session.Delete(queueEntry);

    try
    {
        _session.Flush();
    }
    catch (Exception ex)
    {
        _session.Clear();
    }

    return 1;
}
我试着用transaction来包装我放在这里的整个代码,而不是
\u session.Flush()
我放了
transaction.Commit()

映射:

var queueEntry = _session.Query<MyTable>().FirstOrDefault(x => x.Id == id);
if (queueEntry != null)
{
    _session.Delete(queueEntry);

    try
    {
        _session.Flush();
    }
    catch (Exception ex)
    {
        _session.Clear();
    }

    return 1;
}
这是

问题:

var queueEntry = _session.Query<MyTable>().FirstOrDefault(x => x.Id == id);
if (queueEntry != null)
{
    _session.Delete(queueEntry);

    try
    {
        _session.Flush();
    }
    catch (Exception ex)
    {
        _session.Clear();
    }

    return 1;
}
是否有任何方法重置此
预期值
以便我可以继续删除值而不出现异常

当然,实体会从表中删除,但我不断得到异常。使用empty
catch
子句忽略此异常对我来说不是一个解决方案

编辑:


附加信息:这个表是长时间运行的进程的队列,它并没有子表,只有一些对服务有用的东西。发布映射。它发生在一段时间之后,而不是第一次删除之后。

通常,此错误表示SQL语句已成功执行,但SQL Server返回的行数为0,而不是预期的1

这可能有几个原因,比如不正确的映射、关闭了rowcount的触发器

通过检查SQL server中执行的SQL语句,您将能够清楚地了解这个问题。可以通过打开nHibernate sql日志记录或使用sql探查器来完成。一旦有了SQL,您可能知道原因,如果没有,请尝试手动运行SQL,看看会发生什么


此外,如果您可以发布映射,它将帮助人们发现任何问题

我已经找到了一些解决方案,可能不是最好的,但很有效:

catch (Exception ex)
{
    _session = _session.SessionFactory.OpenSession();
}

如果打开新会话,它将丢失有关行数的信息,下次工作正常。

此问题来自
SessionFactory


使用
SessionFactory.save或update

为什么不使用
Session.get
获取条目?@AlessandroD'Andria在这种情况下没有任何区别,但感谢您的提示。此实体是否有子实体?你能给我们看看你的映射吗?@SimonWhitehead这个实体没有任何子元素,我会发布我的mappings@SimonWhitehead我正在使用代码映射