2011-11-24 77 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屬性