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();
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律