2

我是的新手 - 我還在EntityFramework,我正在學習它們。我在NHEF中看到Lazy關鍵字,但我無法理解它。如何解釋Lazy五歲?這似乎很重要。你能用簡單的語言來解釋一下嗎?懶惰在NHibernate中有什麼意思

UPDATE:

NHibernate的3.2映射通過代碼,我們有:

ManyToOne(t => t.SomeProperty, t => t.Lazy(LazyRelation.Proxy)); 

LazyRelation有這樣的靜態值:

public abstract class LazyRelation { 
    public static LazyRelation Proxy; 
    public static LazyRelation NoProxy; 
    public static LazyRelation NoLazy; 
} 

是什麼意思每他們?先謝謝了。

回答

5

延遲加載是由ORM(例如EF,NH和Linq2SQL)使用的技術,因此不會立即檢索層次結構中的相關實體。相反,只有在需要時纔會提取相關實體,通常是在「導航到」或取消引用時。

例如在班級模型中,您可能擁有Person的班級,該班級的Collection(例如IEnumerable)是他/她擁有的Pets

如果您在獲取Person時使用延遲加載,則不會同時獲取相關的Pets集合。這樣,數據庫和內存資源就得到保存。然而,如果Pets集合被訪問(並且假設ORM的上下文/會話仍然可用),那麼ORM將根據需要去取得寵物。

將此與Eager加載(例如LoadsWith L2SQL或Include EF)進行比較,其中調用方明確指出將與Person一起提取哪個相關實體。

也見這裏:Lazy loading, Deferred Loading and Eager Loading in Entity framework

重新更新 Ayende解釋了爲什麼你會不使用代理延遲加載(與代理延遲加載)here。 NoLazy禁用延遲加載(即急切加載)

您可以閱讀關於用於implement lazy loading on Wiki的技術的更多信息。 討論NH的代理模式實現here

2

懶惰表示只有在訪問過一次對象時纔會創建對象的屬性。 通過這種方式,您可以實例化數千個不使用內存的對象,它們只是引用空對象,直到您使用它們。