1

非常に基本的な質問をするのは危険ですが、それでもここにあります。このようなクエリを使用する場合

List<User> users = session.Query<User>.ToList();

デバッグでは、ユーザーエンティティのほかに、ロールコレクションと写真コレクションがフェッチされていることがわかります。

私の質問は、子コレクションなしでユーザー コレクションのみを選択する方法です。

ありがとう

アップデート:

public RoleMap()
{
   Table("Role");
   Id(x => x.Id).GeneratedBy.Identity();
   Map(x => ...
   References(x => x.User).Column("UserId");           
}

私の知る限り、遅延読み込みはデフォルトでオンになっています。ここで何か間違ったことをしている場合は、私を修正してください。

4

4 に答える 4

4

デバッグでコレクションを監視すると、nhibernate によって作成されたプロキシを使用してデータベースからデータが読み込まれます。実行時に生成されたSQLクエリを確認してください

 List<User> users = session.Query<User>.ToList();

データのみが表示Userされ、ロールと写真は表示されません。

于 2012-05-29T19:38:26.253 に答える
1

生成されたSQLを再確認してください。

遅延ロードはデフォルトでオンになっているため、デバッグ時にこれらのコレクションを入力していると思います + 関連するコレクションに署名し、その記号をクリックしてオンデマンドでロードする必要があります。

生成された SQL を確認するには、nhibernate プロファイラーを使用してください。

于 2012-05-29T20:13:15.843 に答える
0

プロジェクションを使用...

 ICriteria crit = Session.CreateCriteria<District>();

        crit.SetProjection(Projections.ProjectionList()
         .Add(Projections.Alias(Projections.Property("Description"), "Description"))
         .Add(Projections.Alias(Projections.Property("Active"), "Active"))
         .Add(Projections.Alias(Projections.Property("Id"), "Id"))
         );
        crit.SetResultTransformer(new NHibernate.Transform.AliasToBeanResultTransformer(typeof(District)));
        return crit.List<District>();

これにより、関心のあるプロパティがハイドレートされ、他のプロパティは無視されます...ネットワーク上のトラフィック量を削減するのに適しています.

于 2012-05-29T19:42:12.980 に答える
0

遅延読み込みを使用する: http://nhibernate.info/doc/howto/various/lazy-loading-eager-loading.html

つまり、NHibernate は、本当に必要な場合にのみ、これらの子 (関連付け) をロードします。

于 2012-05-29T19:43:43.967 に答える