7

私はコレクションの読み込みを怠っています。また、person テーブル内に非常に多くのフィールドがあるため、特定のプロパティのみを取得する射影関数を作成しています。他のエンティティのコレクションではなく、プロパティで機能します。それらがプロキシとして読み込まれ、後で取得できれば問題ありませんが、現在は null で読み込まれます。

public IList<Person> ListTop40()
        {
            var list = _session.CreateCriteria(typeof(Person))
                   .SetProjection(Projections.ProjectionList()
                   .Add(Projections.Property("FirstName"))
                   .Add(Projections.Property("LastName"))
                   .Add(Projections.Property("Jersey"))
                   .Add(Projections.Property("FortyYard"))
                   .Add(Projections.Property("BenchReps"))
                   .Add(Projections.Property("VertJump"))
                   .Add(Projections.Property("ProShuttle"))
                   .Add(Projections.Property("LongJump"))
                   .Add(Projections.Property("PersonSchoolCollection"))
                    )
                    .List<IList>()
                    .Select(l => new Person() { FirstName = (string)l[0], LastName = (string)l[1], Jersey = (Decimal)l[2], FortyYard = (Decimal)l[3], BenchReps = (Decimal)l[4], VertJump = (Decimal)l[5], ProShuttle = (Decimal)l[6], LongJump = (Decimal)l[7], PersonSchoolCollection = (IList<Person_School>)l[8]});

            IList<Person> s = list.ToList();
            return s;
        }
4

2 に答える 2

3

AliasToBeanResultTransformer を使用してみてください:

var list = _session.CreateCriteria(typeof(Person))
               .SetProjection(Projections.ProjectionList()
               .Add(Projections.Property("FirstName"))
               .Add(Projections.Property("LastName"))
               .Add(Projections.Property("Jersey"))
               .Add(Projections.Property("FortyYard"))
               .Add(Projections.Property("BenchReps"))
               .Add(Projections.Property("VertJump"))
               .Add(Projections.Property("ProShuttle"))
               .Add(Projections.Property("LongJump"))
               .Add(Projections.Property("PersonSchoolCollection"))
                )
               .SetResultTransformer(new NHibernate.Transform.AliasToBeanResultTransformer(typeof(Person)))
               .List<Person>();
于 2010-12-23T12:33:03.173 に答える
1

何件の物件をお持ちですか?クライアント エンティティには約 30 個以上ありますが、NH にロードするときに問題はありません。

実際にはそうではない場合、パフォーマンスについて心配しているかもしれません。(古い: 時期尚早の最適化はすべての悪の根源です" :) )

そうは言っても、このようなものがサポートされているとは思えません。

于 2009-07-30T04:08:15.893 に答える