载入与进入Nhibernate

载入与进入Nhibernate,nhibernate,orm,s#arp-architecture,nhprof,Nhibernate,Orm,S#arp Architecture,Nhprof,web应用程序中的母版页执行身份验证,并使用Get加载用户实体 在此之后,每当usercontrols或任何其他类需要用户对象时,我都执行加载 通常,只要调用的加载。但这不是我的web应用程序所显示的行为NHprof在调用Load时始终显示sql。如何验证加载的正确行为 我使用的是S#arp架构框架。如果使用Get,则会对数据库进行点击。 如果使用Load,则不会命中数据库,但对象(在您的情况下是用户)是使用“延迟加载”创建的。因此,当您检查属性时,它知道您需要数据,因此它会通过查询访问数据库以

web应用程序中的母版页执行身份验证,并使用
Get
加载用户实体

在此之后,每当usercontrols或任何其他类需要用户对象时,我都执行
加载

通常,只要调用的
加载
。但这不是我的web应用程序所显示的行为NHprof在调用Load时始终显示sql。如何验证加载的正确行为


我使用的是S#arp架构框架。

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

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


因此,您需要的可能是二级缓存。

实际上,对未标记为懒惰的实体调用Load会导致立即加载。这是因为非惰性实体永远不会被代理。在本例中,它的行为方式与Get相同