NHibernate 3懒惰属性和急切的查询

时间:2011-01-28 08:47:07

标签: nhibernate lazy-loading

我正在使用NHibernate 3.0.0和新功能的懒惰属性。但是,在某些查询中,我想急切地加载属性,我希望查询导致非代理实体实例。我也更喜欢使用LINQ提供程序或QueryOver。所以我的两个问题是:

  1. 我知道那急切的装载 属性可以在HQL中实现 用“获取所有属性”但是 它可以做同样的事情 LINQ提供程序还是QueryOver?
  2. 如果我使用“fetch all properties”执行HQL查询,结果中的实体确实会被急切地加载,但它们仍然被代理。有没有办法避免这种情况?
  3. 干杯

2 个答案:

答案 0 :(得分:4)

对于问题1 :答案是否定的,“http://ayende.com/blog/4377/nhibernate-new-feature-lazy-properties中描述的”获取所有属性“目前仅在HQL中受支持。

我确实记得在某个地方看过NH Google Discussions,我无法找到该主题。如果我今天能找到,会更新答案。但截至目前的3.1版本,它只在HQL中发布。

对于问题2 :我不知道是否有办法避免这种情况,我通常将它们转换为DTO并在使用WCF时序列化DTO,而不是NH Poco。莱昂纳多的链接看起来很有趣,可能会有所帮助。

答案 1 :(得分:0)

您可以使用此http://davybrion.com/blog/2009/03/must-everything-be-virtual-with-nhibernate/ 禁用你的类的延迟加载(无代理)
您可以使用此http://nhibernate.info/doc/nh/en/index.html#querycriteria-dynamicfetching 急切加载你的财产
或者你可以尝试这个http://www.timvasil.com/blog14/post/2008/02/WCF-serialization-with-NHibernate.aspx 并仍然使用代理。