0

I am wondering since nhibernate has to make the entire object does it make sense to do this?

Session.Query<Table>().Where(x => x.Id == id).Select(x => x.ColumnA).FirstOrDefault();

or would it be better to do this

Session.Query<Table>().Where(x => x.Id == id).FirstOrDefault();

I am trying to decide if I should make a separate method in my service layer to just return back ColumnA and have another method that returns all the fields back.

Or should I just have the one method that return all the fields like the second example would.

On one hand if I do it the first way then less data has to come back from the database especially when you know only one column will be used. On the other hand though it would suck if I need to it for each column.

 Session.Query<Table>().Where(x => x.Id == id).Select(x => x.ColumnB).FirstOrDefault();
 Session.Query<Table>().Where(x => x.Id == id).Select(x => x.ColumnC).FirstOrDefault();
4

2 に答える 2

2

1つのプロパティ(またはそれらの数)を選択することは予測です。NHibernateは確かにプロジェクションをサポートしており、プロジェクションを使用することが理にかなっている多くの状況があります。

それはあなたが解決しようとしている問題に依存します。問題があることがわからない場合は、投影法を使用して単一のプロパティを選択しないことを強くお勧めします。エンティティを操作する方がはるかに簡単です。ただし、実際のパフォーマンスの問題に直面している場合は、何が起こっているのか、ボトルネックがどこにあるのかを分析する必要があります。その分析の結果、エンティティの単一のプロパティではなくエンティティ全体を選択していることが原因であることがわかります。必ずプロジェクションを使用してください。

そうは言っても、エンティティに多くのプロパティや大きなデータがない限り、単一のプロパティを投影することはおそらく意味がありません。また、クエリプランの重複など、パフォーマンスにわずかなペナルティがあります。

于 2012-09-27T08:52:36.457 に答える
0

ORM "NHibernate" の主なアイデアは、完全な値のオブジェクト (エンティティ) を操作する機会を与えることだと思います。少数のフィールド (すべてのオブジェクトではない) のみを取得するクエリを使用している場合、NHibernate が提供する利点のほとんどを使用できない間違った方法です。

于 2012-09-27T08:08:31.707 に答える