我正在使用 NHibernate 来访问数据层。我以前加载了内存中的一个实体,并且我进行了更改以便在数据库上保存之后。当我的应用程序同时在某些机器上运行时,问题就出现了,而其他用户从数据库中删除了我在内存中想要保存的同一个对象。当我尝试保存更改或删除此实体时,会触发 StaleStateException。
我以这种方式检查数据库调用中是否存在实体session.Get<T>
(它成功获得空值):
using (var session = NHibernateSessionHelper.OpenSession())
{
using (var transaction = session.BeginTransaction())
{
var entity = session.Get<T>(persistObject.Id);
return entity == null ? false : true;
}
}
当我无法区分实体已被其他会话/用户删除(因此我在内存中的实体已过时)或实体最近创建并能够保存时,问题就出现了。我认为唯一的解决方案是实施一种机制来检查实体是否已经从数据库中保存或加载,以便在继续时丢弃实体或保存。
有没有办法通过使用 nhibernate 来检查这种行为?我试过了,session.Refresh() and session.Get<T>
但我仍然不知道该对象是新的并且准备好保存还是过时。
非常感谢帮助。