0

わかりましたので、次の関係があります。

Bulletin < BulletinEmailLog < BulletinEmailLogRecipient - 連絡先 - エンティティ

「<」は 1 対多を表し、「-」は 1 対 1 を表します。

コードは次のとおりです。

BulletinEmailLog BulletinEmailLogs = null;
        BulletinEmailRecipient EmailRecipients = null;
        Contact Contact = null;
        Entity Entity = null;
        var pastBulletin = NHibernateSession.Current.QueryOver<Bulletin>()
                        .Where(x => x.Id == bulletinID)
                        .Fetch(x => x.BulletinEmailLogs).Eager
                        .JoinAlias(x => x.BulletinEmailLogs, () => BulletinEmailLogs, NHibernate.SqlCommand.JoinType.LeftOuterJoin)
                        .JoinAlias(() => BulletinEmailLogs.Recipients, () => EmailRecipients, NHibernate.SqlCommand.JoinType.LeftOuterJoin)
                        .JoinAlias(() => EmailRecipients.Contact, () => Contact, NHibernate.SqlCommand.JoinType.LeftOuterJoin)
                        .JoinAlias(() => Contact.Entity, () => Entity, NHibernate.SqlCommand.JoinType.LeftOuterJoin)
                        .Future<Bulletin>();

ここでは、1 つのデータベース クエリを使用して、必要な情報をすべて取得しようとしています。問題は、後で BulletinEmailLogs をループしようとしたときに、データベースへの呼び出しが表示されることです。後でメモリを使用して検索を行うために、前のコード内に熱心な読み込みステートメントを追加できるようにしたいと考えています。それは可能ですか?

4

1 に答える 1

0

提案ありがとう。イーガー ロード ステートメントを削除したところ、データベースへの呼び出しが 1 回だけ行われていることがわかりました。今、私は別の懸念/問題を抱えています。私がよく知らないクエリで参照されている他のテーブルがあります。私はコードに慣れていないので、関係を適切に調べていないだけかもしれません。とにかく、ありがとう。

于 2013-02-12T21:09:02.273 に答える