2

関連オブジェクトの ICollection を使用して POCO クラスをセットアップしました。それらは WCF サービスにあるため、DataContract/DataMember で装飾しました。関連するオブジェクトには仮想プロパティを使用しません。これは、シリアル化されないプロキシを作成するためです (「基になる接続が閉じられました」という一見無関係なメッセージが表示されますが、仮想修飾子を削除すると、それは消えます)。

私が理解に苦しんでいるのは、関連オブジェクトのコレクションを遅延ロードする方法です。POCOはコンテキストにアクセスできないため、自分でそれを行うことはできないと思います.

たとえばCompany、プロパティを持つクラスがありICollection<Principals>ます。私は通常、会社を取得するときにすべてのプリンシパルをロードしたくはありませんが、Company.Principalsそれらを取得するための参照が必要です。明らかに、Companyそれだけではそれを行うことはできません。

(1) POCO オブジェクト、(2) 典型的な WCF シリアル化、および (3) 遅延読み込み関連プロパティを持ちたいという欲求を組み合わせるために、人々は何をしていますか?

4

1 に答える 1

0

遅延読み込みには、プロキシと仮想ナビゲーション プロパティが必要です。プロキシがない場合は、別の方法でロードを処理する必要があります。たとえば、熱心な読み込みを使用して:

var companies = context.Companies.Include("Principals").ToList();

またはEF 4.1で

var companies = context.Companies.Include(c => c.Prinicpals).ToList();

どの操作が関連するプリンシパルもロードする必要があるかはわかっているので、熱心なロードを使用しても問題ありません。シリアル化を使用して WCF サービスで遅延読み込みを使用すると、常にオブジェクト グラフ全体が読み込まれます。

于 2012-06-14T08:24:25.047 に答える