我一直在尝试优化某些查询并注意到一个查询速度很快(来自它的查询计划),但由于Clob列数据,它花了很多时间在网络I / O上。
我看到了NHibernate supports lazy loading individual properties,但我还没有能够让他们工作。
当我将LazyLoad()
添加到我的clob属性时,该属性将从我的查询中排除,并且性能得到了很大改善,但是当访问该属性时,我收到以下错误:
Error: "identifier of an instance of Domain.MyClass was altered from 8741 to 0").
public class MyClassMap : ClassMap<MyClass>
{
public MyClassMap()
{
...
Map(x => x.Description).LazyLoad();
}
}
我尝试了相反的方向并将属性映射为正常(急切),并且我需要排除列,尝试将查询中的属性设置为懒惰,如下所示:
var query = session.QueryOver<MyClass>()
.Fetch(x => x.Description).Lazy
但该属性仍作为原始查询的一部分加载。我不确定是否有解决方法(不确定是否可以将属性作为Component()或HasOne()的一部分延迟加载)。
注意:我读取延迟加载属性可能不受LinFu代理工厂支持(默认为NH3.x),可能需要使用Castle代理工厂(参见上次评论:{{3}虽然我还没有尝试更改代理(但还不确定如何)。