在NHibernate中获取延迟加载的属性,*不是*引用

时间:2012-05-16 14:14:32

标签: nhibernate

我有一个二进制列的实体,在映射中设置为延迟加载。但是,在某些情况下,我们希望同时获取实体和二进制数据。我尝试使用Linq.Fetch(x => x.BinaryData),但这会产生无效的连接异常。可以理解,考虑到它不应该是首先加入。有没有办法让这个工作?我正在使用NHibernate 3.1

这是映射:

Map(x => x.BinaryData)
   .CustomSqlType("image")
   .Length(int.MaxValue)
   .Not.Nullable()
   .LazyLoad();  // Wanna make sure we don't kill the app by loading the image data when we don't need it.

这是抓取:

Linq.Where(x => x.Id == id).Fetch(x => x.BinaryData).FirstOrDefault();

2 个答案:

答案 0 :(得分:2)

在HQL中,您可以使用fetch all properties来急切加载延迟属性。但是在NH3.1中,Linq查询尚未实现。我知道这个bug在NHibernate Jira中,所以你可以检查它是否已经解决,或者你可以自己修复它。对于我们公司的原型我修复了这个bug,但是我是以非常强力的方式这样做的,所以我没有向NHibernate项目发送补丁

答案 1 :(得分:2)

目前似乎无法做到这一点:https://nhibernate.jira.com/browse/NH-2888

所以,你必须使用HQL:

var post = session.CreateQuery("from Post fetch all properties")
    .SetMaxResults(1)
    .UniqueResult<Post>();

来源:http://ayende.com/blog/4377/nhibernate-new-feature-lazy-properties