0

いくつかの内部結合を持つ NHibernate 分離基準クエリがあり、生成された SQL ステートメントを取得すると、実際には必要のないプロジェクションに多くの列があるようです。最も厄介なことは、これがパフォーマンスに重大な影響を与えることです。

たとえば、生成されたクエリは次のようになります

    select a.a, a.b, a.c .... a.z,
    b.a, b.b, b.c .... b.z
    from ...
    where...

しかし、私が実際に取得しようとしているのは

    select a.*
    from ...
    where...

基準 API に関する知識が未熟であるため、結果トランスフォーマーまたはその他の方法を使用して、これを解決するのに役立つ可能性のあるリソースを見つけようとしました。

これは可能ですか?

4

2 に答える 2

1

データベースで * を選択することは、ベスト プラクティスとは見なされません。あなたはそれを参照する無限のコメントを見つけるでしょう. したがって、select * は避けてください。QueryOver または Linq 構文を使用して NHibernate でプロジェクションを使用し、必要な列の SQL 選択のみを生成できます。

           var trades = _session.QueryOver<Trade>()
              .SelectList(list => list
                                        .Select(x => x.Name))
              .List<object>();

また

            var trades = _session.Query<Trade>()
                  .Select(x => new
                                     {
                                           x.Name
                                     })
                  .ToList();
于 2012-07-05T13:18:32.570 に答える
0
  query.SetProjection(ResultProjectionList);
  query.SetResultTransformer(NHibernate.Transform.Transformers.AliasToBean(typeof(Result)));

魅力のように働きました:-)

また、こちらの記事も大変参考になりました

http://www.skimedic.com/blog/post/2009/02/03/Using-Projections-and-Transformers-in-NHibernate.aspx

于 2012-07-05T13:25:17.923 に答える