如果我使用NHiberante在多个属性列上设置LazyLoad并依次访问这些属性,它是否会在数据库中查询每个属性?
例如:
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个查询
或当NHibernate在DB中查询FullName时,它会查询该行的所有列吗?
答案 0 :(得分:2)
NHibernate将在单个查询中加载实体的所有惰性属性(您可以自己尝试......)
此功能的主要用例是blob。
另一方面,Lazy references 会根据需要加载。
作为旁注,session.Load
不查询数据库;它只是创建一个代理,它将被懒惰地加载。使用session.Get
。
答案 1 :(得分:2)
将有2个查询