我正在构建一个 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 时急切加载 EventRecords?
[编辑]
在 Orchard CMS 中,NHibernate 映射是为您创建的,基于类称为 xxxRecord 的约定,并且有一个同名的数据库表。
因此,您(据我所知)没有可以在其中指定的映射文件。如果我是对的,那么问题是是否有任何方法可以指定您希望在查询中预先加载用于检索客户端(很像实体框架的“包含”方法)。