2009-05-11 15 views

答えて

18

私はあなたがMust Everything Be Virtual With NHibernate?

を読むことをお勧めその質問への迅速な答えは: 我々は遅延ロード 魔法/ブードゥー教を行うために 仮想するメンバーを必要とするので。

もっと答えがよければ でも面白いです。 ORMの持つ重要な機能は、透過的です。Lazy 読み込み中です。オブジェクト をORMで取得した場合、 オブジェクト全体を自動的にオブジェクト のグラフ(デフォルトではありません)に自動的にプルしたくはありませんが、 でコードを破棄したくない場合特定のアソシエーション がまだロードされており、必要に応じて をロードします。これは、ORMの 責任です。理想的には、 がプロパティにアクセスし、 のデータがまだ取得されていない場合は、 にこれらのプロパティの最初のアクセス時に、ORMが必要なデータをロードするようにします。

6

Andrewは言ったように、プロパティはレイジーローディングをトリガするために仮想的です。実行時に、NHibernateは実際のプロパティオブジェクトを代理オブジェクトに置き換えます。一度アクセスされると、プロキシオブジェクトは実際のオブジェクトを取得する方法を知っています。プロパティを仮想としてマークすると、この置換が行われます。

関連する問題