NHibernate 异常

NHibernate.StaleStateException: Batch update returned unexpected row count from update; actual row count: 0; expected: 1

1.这个错的导致原因有许多,笔者这里的原因是因为更新不存在的数据导致。

场景:将几个SQL动作包在事务中执行,

复制代码
Customer_Mod customer = new Customer_Mod
{
    CustomerID =1,
    KemuID = model.KemuID,
    ZhangtaoID = model.ZhangtaoID,
    NCName = model.NCName,
    MaterialTypes = model.MaterialTypes
};

var m = session.Merge(customer);
session.Flush();
复制代码
var sqlDel = "delete from [dbo].[Sys_User] where UserID=1" ;
ISQLQuery query = session.CreateSQLQuery(sqlDel);
var n = query.ExecuteUpdate();

错误就是在第三步的session.Flush() 报出的,因为这里拿到的userID实际上是已经删除的那条User数据,但是整个操作包含在事务中,所以这种更新操作是不允许的

复制代码
ISQLQuery query = session.CreateSQLQuery("SELECT isnull(max(UserID),0) +1 AS C FROM dbo.Sys_User").AddScalar("C", NHibernateUtil.Int32);
var n = query.UniqueResult();
var _userid = Convert.ToInt32(n.ToString());

Sys_User_Mod user = new Sys_User_Mod
{
    UserID = _userid,
    UserName = item.UserName,
};

var m1 = session.Merge(user);
session.Flush();
复制代码

 

posted @   竹殇  阅读(143)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示