NHibernate version: 3.3.2.
我有一个包含多个操作的 NHibernate 事务。作为事务中的中间步骤之一,我尝试通过 Session.Save 插入一个具有自动增量 PK 的新实体实例。
在某些情况下,由于违反的外键值导致插入错误。我捕获异常以进行一些日志记录并忽略它,假设插入尚未完成并继续执行以下步骤。这是功能要求,无法更改。根据性能要求,在插入之前验证值也不是可接受的解决方案。
我的问题:非持久化实体已添加到 NH 会话缓存中,但 ID 为空。所以我稍后在做一些其他的 NH 操作时得到这个异常:
NHibernate.AssertionFailure: null id in MyApp.MyPackage.MyClass entry (don't flush the Session after an exception occurs)
我的问题:我怎样才能把这个烦人的“僵尸”实体从会话中拉出来,这样我才能在所有步骤结束时成功提交事务?
我不能驱逐它,因为 ID 是空的。
我试了一下,得到了以下异常:
System.InvalidOperationException: cannot generate an EntityKey when id is null
我不能进行Clear()
当前会话,因为我正处于事务中间,并且要保留一些先前和后续步骤。
我得到的原始异常有点令人困惑,并且被抛出与真正问题的起源不同的地方。这个链接给了我一些信息来弄清楚发生了什么:NHibernate - null id in entry(发生异常后不要刷新会话)