データを熱心にロードしたい Orchard CMS モジュールを構築していますが、これを行う方法がわかりません。
たとえば、クライアントには多くのイベントがあるため、これらの ClientRecord と EventRecord があります。
public class ClientRecord {
private IList<EventRecord> _eventRecords;
public virtual int Id { get; set; }
public virtual string Company { get; set; }
public virtual IList<EventRecord> EventRecords {
get { return _eventRecords ?? (_eventRecords = new List<EventRecord>()); }
set { _eventRecords = value; }
}
}
ClientController にクライアントをロードするとき
var clientRecord = _clientRepository.Get(id);
次に、ビューにイベントを表示します
<ul>
@foreach (var eventRecord in Model.EventRecords) {
<li>
@eventRecord.Name (@eventRecord.StartDate.ToShortDateString())
</li>
}
</ul>
イベントが表示され、MiniProfiler はイベントを遅延ロードする別のクエリを表示します。
ClientRecord の EventRecords コレクションに [Aggregate] 属性を設定しようとしましたが、効果がありませんでした。
私は NHibernate にあまり詳しくないので、これは簡単なことだと思いますが、ClientRecord が取得されたときに EventRecord を熱心にロードするように指定するにはどうすればよいでしょうか?
[編集]
Orchard CMS では、クラスが xxxRecord と呼ばれ、同じ名前のデータベース テーブルが配置されているという規則に基づいて、NHibernate マッピングが作成されます。
したがって、(私の知る限り)これを指定できるマッピングファイルはありません。私がそれについて正しい場合、問題は、クエリで熱心な読み込みを希望することを指定する方法があるかどうかです。 Client を取得するために使用します (Entity Framework の「include」メソッドのように)。