我在Fluent NHibernate中遇到缓存问题。我想通过ID禁用它进行查询,例如
session.Get<Person>(10);
你有什么想法吗?
答案 0 :(得分:1)
您指的是第一级(会话)缓存吗? 您可以使用Refresh刷新数据库中的实体状态,即:
{{1}}
答案 1 :(得分:1)
如果您已经拥有该实体,请直接在其上调用session.Refresh(person)
,而不是再次获取该实体。
您也可以使用session.Evict(person)
逐出它,导致它不再在会话中,也不再跟踪更改。然后将其丢弃,如果需要,最后再将其丢弃。
否则,从会话缓存中获取它是一件很麻烦的事情。这通常是会话使用不良的标志,例如在许多用户交互中使用相同的会话(反模式)。
你仍然可以做Fredy proposes。或者在获取清除会话缓存之前调用session.Clear()
(并且顺便丢失所有挂起的更改)。
答案 2 :(得分:0)
您可以为Person创建一个DTO并执行QueryOver(),而不是映射一个Person对象。
PersonDTO对象不会被缓存在Nhibernate的first-lvl-cache中。