我试图在我的域模型中延迟加载一个属性,但是延迟加载不起作用。 (它总是被加载)。
[Property(0, Column = "picture", Lazy=true)]
public virtual System.Byte[] Picture
{
get { return picture; }
set { picture = value; }
}
在阅读文档here时,它说它需要构建时字节码检测。这是什么意思 - 我怎么能得到它?
答案 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时,它将从数据库加载该属性。
为此,它可以使用以下三种类型的动态对象框架之一:
当你下载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