2

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

2 回答 2

2

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

于 2012-05-16T14:20:08.483 回答
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

于 2012-05-16T14:20:31.877 回答