You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OrchardCMS主键转long后NHibernate瞬态对象异常排查与解决

解决OrchardCMS 1.10.x主键从int32改为long后出现的NHibernate.TransientObjectException错误

问题背景

我们基于OrchardCMS 1.10.x开发的Web应用,原本使用int32作为ContentItemRecord.Id的主键类型,由于即将达到int32.MaxValue的上限,遂将主键类型改为long。改造完成后,部分操作出现NHibernate.TransientObjectException错误。

错误信息如下:

对象引用未保存的瞬态实例,需先保存或配置级联操作,涉及实体App.Core.Models.XPTOPartRecord。

涉及的实体XPTOPartRecord继承自OrchardCMS的ContentPartRecord,且包含自引用属性ParentXPTOPartRecord。

原因分析

对比int和long模式下的NHibernate日志,发现long模式下触发了unsaved-value:0的判断。

经调试NHibernate确认:问题源于应用特定方法中错误地将ParentXPTOPartRecord.Id初始化为0,NHibernate据此判定该实例为未保存的瞬态对象,从而抛出异常。

解决方案

将ParentXPTOPartRecord直接设为null,而非初始化其Id为0,即可解决该异常。

使用版本

  • OrchardCMS 1.10.x
  • NHibernate 4.0.0.4000
  • Fluent Nhibernate 1.4.0

内容的提问来源于stack exchange,提问作者NatsuDragonEye

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 16:42:35