3

classAのコレクションを含むクラスがありBます。この最後のクラスは非常に重く、私が取り組んでいる新しいモジュールでは、いくつかのフィールドが必要なだけです。

nhibernate を使用して SQL サーバーからエンティティをロードする際のパフォーマンスを向上させるために、開発中のこのモジュール (class BLite) で使用するために、このクラスのライト バージョンを作成したいと思います。

このBLiteクラスは、コレクションと多対 1 の関係で使用されます。必要なフィールドだけを含むこの新しいクラスの個別のマッピングを作成できることはわかっていますが、可能であれば、これを避けたいと思います (コンポーネントまたは同様の機能を使用)。

追加のマッピングを作成せずにクラスの「ライト」バージョンを使用することは可能ですか?

4

3 に答える 3

3

あなたのシナリオで役立つのは、lazyプロパティ マッピング、ドキュメント5.1.9 です。プロパティポイント 9):

lazy (オプション - デフォルトは false): このプロパティが遅延であることを指定します。特定のクエリでフェッチ モードがオーバーライドされていない限り、オブジェクトが最初に読み込まれるときに遅延プロパティは読み込まれません。オブジェクトの遅延プロパティにアクセスすると、遅延プロパティの値が読み込まれます。

これらのプロパティは必要に応じて (オブジェクトがセッションに接続されている間) 利用できますが、暗黙的に読み込まれることはないため、この種のマッピングが適している可能性があります。クエリでは、(1 つの SELECT 句の一部になるように) フェッチ モードを調整できます。

于 2012-12-26T14:19:41.397 に答える
0

これは、Automapper の代替であり、http: //valueinjecter.codeplex.com/を簡単に使用できます。

ここでそれらの比較がありますAutoMapper vs ValueInjecter

いずれにせよ、重いクラスの単純または軽量バージョンを作成する最も簡単な方法は、おそらくマッパーを使用することです

于 2012-12-26T13:52:02.137 に答える
0

You can use AutoMapper for the same purpose. (You need to define lite class, and specify maps for AutoMapper)

Using fluent interface, you can include/exclude only specific fields.

Example

于 2012-12-26T13:47:35.240 に答える