2

NHibernate-もともとEntityFrameworkに新しいです。私はそれらを学んでいます。 NHEFの両方にLazyというキーワードがありますが、わかりません。あなたはどのように説明することができますLazy 5歳?それは重要であるようです。あなたは簡単な言葉でそれを説明できますか?NHibernateでLazyが意味すること

UPDATE:

コードによってのNHibernate 3.2マッピングでは、我々は持っている:

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

がそれぞれの意味:LazyRelationはこの静的な値を持っている

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

ことそれら?ありがとうございました。

答えて

5

レイジーローディングは、ORM(EF、NH、Linq2SQLなど)によって使用される技術であり、階層内の関連エンティティはすぐには取得されません。代わりに、関連エンティティは、必要に応じて、通常は「ナビゲート」または参照解除されたときにのみフェッチされます。

クラスモデルでは、あなたが所有するPetsCollection(たとえばIEnumerable)を持つクラスPersonを持つことができます。

Personをフェッチするときに遅延ロードを使用すると、関連するPetsコレクションは同時にフェッチされません。このようにして、データベースとメモリのリソースが節約されます。

しかし、ペットコレクションにアクセスした場合(そして、ORMのコンテキスト/セッションがまだ利用可能であると仮定した場合)、ORMは、必要に応じてペットにフェッチします。

これをEagerローディング(例:LoadsWith L2SQLまたはInclude EF)と比較します。ここで、発信者は、関連エンティティのどれがPersonとともにフェッチされるかを明示します。

もここを参照してください:あなたは(プロキシ遅延ロード対)は、プロキシの遅延読み込みhereを使用しないだろう、なぜLazy loading, Deferred Loading and Eager Loading in Entity framework

再更新 Ayendeは説明します。 NoLazyは遅延読み込みを無効にします(すなわち、eagerが読み込まれます)

implement lazy loading on Wikiに使用されている手法について詳しく読むことができます。 NHのプロキシパターン実装について説明していますhere

2

レイジーとは、オブジェクトが一度アクセスされたときにのみオブジェクトのプロパティを作成することを意味します。 この方法では、メモリを使用しない何千ものオブジェクトをインスタンス化できます。オブジェクトを使用するまでは空のオブジェクトを参照するだけです。

関連する問題