删除后意外的行计数上升
本文关键字:意外 删除 | 更新日期: 2023-09-27 18:31:23
问题:
我收到错误:
批量更新从更新返回意外的行计数;实际行 计数: 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;
}
尝试:
我尝试了几件事都没有成功,我在catch
子句中添加了以下行:
_session.Disconnect();
_session.Reconnect();
我试图用事务包装我放在这里的整个代码,而不是_session.Flush()
我把transaction.Commit()
映射:
这是按代码映射
public class MyTable : IEntity
{
public virtual int Id { get; protected set; }
public virtual string Type { get; set; }
public virtual string Source { get; set; }
public virtual string OperationType { get; set; }
public virtual bool IsVisible { get; set; }
public virtual DateTime? Timestamp { get; set; }
public virtual string ContentId { get; set; }
public virtual int Priority { get; set; }
}
问题:
有没有办法重置此expected
值,以便我可以继续删除值而没有例外?
当然,实体会从表中删除,但我不断收到异常。使用空的catch
子句来忽略此异常对我来说不是解决方案。
编辑:
附加信息:此表是长时间运行进程的队列,它没有子表,只有一些对服务有用的东西。已发布的映射。它发生在一段时间后,而不是在第一次删除之后。
通常此错误
表示 SQL 语句已成功执行,但 SQL Server 返回的 ROWCOUNT 为 0,而不是预期的 1。
这可能有多种原因,例如不正确的映射、关闭行计数的触发器。
通过检查在 sql 服务器中执行的 SQL 语句,您将能够清楚地了解该问题。这可以通过打开 nHibernate sql 日志记录或使用 sql 分析器来完成。一旦你有了SQL,你可能知道原因,如果没有,尝试手动运行SQL,看看会发生什么。
此外,如果您可以发布映射,它将帮助人们发现任何问题
我已经管理了一些解决方案,也许不是最好的,但可以工作:
catch (Exception ex)
{
_session = _session.SessionFactory.OpenSession();
}
如果打开新会话,则会丢失有关行计数的信息,下次工作正常。
这个问题
来自SessionFactory
使用SessionFactory.SaveOrUpdate