NHibernate延迟加载属性 - 构建时字节码检测意味着什么?

时间:2009-09-30 10:05:09

标签: nhibernate lazy-loading

我试图在我的域模型中延迟加载一个属性,但是延迟加载不起作用。 (它总是被加载)。

[Property(0, Column = "picture", Lazy=true)]
public virtual System.Byte[] Picture
{
       get { return picture; }
       set { picture = value; }
}

在阅读文档here时,它说它需要构建时字节码检测。这是什么意思 - 我怎么能得到它?

2 个答案:

答案 0 :(得分:1)

我试过一个集合而不是一个数组吗?

[Property(0, Column = "picture", Lazy=true)]
public virtual IList<System.Byte> Picture
{
       get { return picture; }
       set { picture = value; }
}

答案 1 :(得分:0)

对于延迟加载工作,NHibernate使用拦截(通过动态对象)。这意味着它将您的调用包装到Picture中,当您第一次调用Picture时,它将从数据库加载该属性。

为此,它可以使用以下三种类型的动态对象框架之一:

  • Castle DynamicProxy
  • 李林甫
  • 弹簧

当你下载NHibernate时,有另外一个文件夹有三种类型的动态对象插件,你需要将三个dll复制到nhibernate文件夹(nhibernate.dll所在的位置)并在你的nhibernate配置文件中设置一个属性。

<property name="proxyfactory.factory_class">NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu</property>

参考:http://nhforge.org/blogs/nhibernate/archive/2008/11/09/nh2-1-0-bytecode-providers.aspx

HTH Alex