我有一个二进制列的实体,在映射中设置为延迟加载。但是,在某些情况下,我们希望同时获取实体和二进制数据。我尝试使用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();
答案 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