流畅的NHibernate禁用缓存

时间:2017-05-29 17:45:31

标签: nhibernate orm fluent-nhibernate

我在Fluent NHibernate中遇到缓存问题。我想通过ID禁用它进行查询,例如

session.Get<Person>(10);

你有什么想法吗?

3 个答案:

答案 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中。