3

Stackoverflowを見回して、NHibernateIListとListに関連するいくつかの質問を見ました。私自身の質問があります...

IListの目的はレイジーロードされたリストを持つことであるため、リポジトリからの戻りにはどのような目的がありますか。結局のところ、リポジトリ呼び出しをToList()すると、決定的なオブジェクトが作成されますか?したがって、メソッドがIListまたはListを返すかどうかに関係なく、遅延読み込みは必要ありません。

4

2 に答える 2

3

リポジトリがIQueryableを返す場合、最初に列挙したときに結果が取得されます。ToList()を呼び出すと、ToListがIQueryableを列挙するため、現時点で結果が取得されます。

さて、遅延読み込みは必ずしもこの動作の影響を受けるわけではありません。顧客と注文があるとします。各顧客には、遅延読み込みとしてマークされたCustomerOrdersという名前のプロパティがあります。つまり、顧客のリストをロードするときに、各顧客のCustomerOrdersプロパティを列挙しようとした場合にのみ、注文が取得されます。したがって、GetCustomers()メソッドの戻り値に対してToList()を実行しただけでは、CustomerOrdersの遅延読み込みには影響しません。

于 2012-08-24T12:27:57.037 に答える
3

あなたはかなり正しいですが、いくつかの概念を混乱させているので、上から取り上げます。

あなたはそのことは正しいです.ToList() materializes

IListマテリアライズドリストの単なる抽象的なインターフェイスです。

NHibernateは、物事をプロキシするため、IList場合によっては必要になります。などを使用する場合は、extensionメソッドを使用して(具体化された)を返すか、(遅延)を返します。はかなり安定していて完全で、よく舗装されています。session.QueryOverList()IListFuture()IEnumerableQueryOver

Linqプロバイダー側​​では、を使用し、怠惰なアイテムまたは具体化されたアイテムの「クエリの仕様」を持つレベルにsession.Queryとどまることができます。通常は、をマテリアライズするために使用し、(またはキャスト/型変換)を使用してに到達します。注意:LINQプロバイダーについてQueryOverに関して行ったステートメントを作成できません。IQueryableIEnumerableIListToList()AsEnumerable()IEnumerable

于 2016-04-05T16:05:30.463 に答える