加载vs获取Nhibernate

时间:2010-04-04 17:33:33

标签: nhibernate orm s#arp-architecture nhprof

我的Web应用程序中的母版页进行身份验证,并使用Get加载用户实体。

此后,只要usercontrols或任何其他类需要用户对象,我就会Load

每当被调用Load时,

通常为nhibernate is supposed to load the object from cache or return the persistent loaded object。但这不是我的Web应用程序显示的行为。每当调用Load时, NHprof 始终显示sql。如何验证Load的正确行为?

我使用 S#arp架构框架。

2 个答案:

答案 0 :(得分:6)

实际上,在未标记为惰性的实体上调用Load会导致立即加载。这是因为非惰性实体永远不会被代理。在这种情况下,它的行为与Get相同。

答案 1 :(得分:2)

如果使用Get,则会对数据库进行命中。 如果使用Load,则不会对数据库进行命中,但是使用“延迟加载”创建对象(在您的情况下为User)。因此,当您检查属性时,它知道您需要数据,因此它会通过查询来访问数据库以获取数据。

如果要从缓存中获取对象,则需要考虑2个选项。 第一级缓存是在一个会话中使用的缓存。因此,当您关闭会话或在不同的会话中加载相同的对象时,您会获得额外的命中。 二级缓存适用于所有会话。如果一个会话获取该对象,则另一个会话从缓存中获取它。

所以你想要的可能是二级缓存。