2011-11-24 78 views
2

如果我在多个属性上使用NHiberante设置LazyLoad并逐个访问这些属性,它会查询每个属性的数据库吗?
例子:Nhibernate在多列上的懒加载

public class Product 
{ 
    public virtual int ID {get; set;} 
    public virtual string Name {get; set;} 
    public virtual string FullName {get; set;} 
    public virtual float Price {get; set;} 
} 

public class ProductMap : ClassMap<Product> 
{ 
    Id(p => p.ID); 
    Map(p => p.Name).Not.LazyLoad(); 
    Map(p => p.FullName).LazyLoad(); // Redundant - I know... 
    Map(p => p.Price).LazyLoad(); // Redundant - I know... 
} 

如果我查询数据库这样的:

var product = session.Load<Prodct>(2); 
if (product.FullName == "*" && product.Price = 111) 

会有3查询

  1. 产品实体
  2. FullName属性
  3. 价格属性

或者当NHibernate查询数据库的FullName时,它会查询该行的所有列?

回答

2

NHibernate的会加载一个实体的所有延迟属性在单个查询(你可以自己尝试...)

主要用例此功能的斑点。

懒惰参考文献另一方面根据需要加载。

作为便笺,session.Load不查询数据库;它只是创建一个代理,它将被延迟加载。使用session.Get

+0

这是我所看到的一样,所以将有两个疑问吧?希望这种情况会更短,然后在其他线程中处理。 **; - )** – gdoron

+0

是的,您将有一个查询非懒惰属性,一个查询所有懒惰属性。 –

2

会有2个查询

  1. 产品实体
  2. 所有LazyLoaded属性