Nhibernate中部分加载的对象

时间:2011-12-09 10:33:16

标签: nhibernate lazy-loading

我有一个Blob的对象,我需要加载该blob懒惰或稍后(可以调用另一种方法) 根据{{​​3}} nhibernate支持属性延迟加载。 我有一个简单的映射

 Id(x => x.Id);
 Map(x => x.Name).Length(45);
 Map(x => x.Value).LazyLoad();
 Map(x => x.Description).Length(200);
 Version(x => x.CreatedDate);
 HasManyToMany(x => x.ProductVariants);

我的目标是:

 public virtual int Id {get;set;}
 public virtual string Name { get; set; }
 public virtual byte[] Value { get; set; }
 public virtual string Description { get; set; }
 public virtual DateTime CreatedDate { get; set; }
 public virtual IList<ProductVariant> ProductVariants { get; set; } 

我正在尝试使用以下方法检索对象:

 using (var session = GetSessionFactory().OpenSession())
        {
            return session
                .CreateCriteria<DataResource>()
                .List<DataResource>()
                .ToArray();
        }

但它失败了:

Checks loading of data resource: NHibernate.PropertyAccessException : Invalid Cast (check your mapping for property type mismatches); setter of ***.DataResource
  ----> System.InvalidCastException : Unable to cast object of type 'System.Object' to type 'System.Byte[]'.

但是当我为Value字段删除.LazyLoad()时 - 一切正常。 我究竟做错了什么?我的Nhibernate版本是3.1.0.4000

不要求加载延迟该属性。我现在根本不想加载它(它将在应用程序的另一部分中加载完成)。我在互联网上看到了这个问题的一些解决方案,但是大多数都使用单独的懒类或自定义查询。但我需要有一个表和一个类用于此映射,并且禁止编写自定义查询。

Upd:忘了添加那个session.Save(dataResource);工作正常。问题仅在于如何从表中获取数据

0 个答案:

没有答案