强制NHibernate获取已经处于持久状态/第一级缓存的实体

dra*_*fly 4 nhibernate

我有一个服务对象负责一些业务逻辑验证.在对Update进行更新之前,它所做的是检查它所使用的实体是否符合某些业务规则.

其中一个必须检查的规则是,与数据库中的实体相比,实体的Status属性是否未更改.因为我使用共享同一个ISession的存储库,当我尝试从数据库中获取实体时,为了得到一个用于比较的对象:

if (fromDbEntity.Status != entity.Status) throw new Exception("Cannot change status...");
Run Code Online (Sandbox Code Playgroud)

我将永远从第一级缓存中的DbEntity获取- 所以我在同一个对象上工作.

有没有办法强制NHibernate/Repository从数据库中获取实体,即使它已经在会话范围内?

Cla*_*edi 7

entity在加载之前从会话中逐出fromDbEntity

session.Evict(entity);
Run Code Online (Sandbox Code Playgroud)

您可以查看官方文档以获取更多详细信息:管理缓存

关于这一点的问题是,您需要手动调用SaveOrUpdate,entity因为此时对象已不在会话中.