NHibernate中的延迟加载

NHibernate中的延迟加载,nhibernate,lazy-loading,Nhibernate,Lazy Loading,如果一个客户有很多订单。如何使用NHibernate惰性加载订单列表 是否需要设置映射文件?任何帮助或示例都会很好。这里有一篇好文章: 根据上述条款: 最常见的方法是简单地用'lazy=“true”属性标记类,或在映射声明中放置'default lazy=“true”: <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="@core.assembly@" default-access="nosetter.cam

如果一个客户有很多订单。如何使用NHibernate惰性加载订单列表

是否需要设置映射文件?任何帮助或示例都会很好。

这里有一篇好文章:

根据上述条款:

最常见的方法是简单地用'lazy=“true”属性标记类,或在映射声明中放置'default lazy=“true”:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="@core.assembly@"
 default-access="nosetter.camelcase-underscore" default-lazy="true">


Chris的建议是我应该怎么做,但是如果您想在运行时做,您可以将您的条件上的Fetchmode设置为lazy,如下所示:

criteria.SetFetchMode("Orders", FetchMode.Lazy)

要延迟加载实体的特定集合,请在集合映射上使用“lazy=true”。例如:

<bag name="EmploymentHistory" cascade="all" inverse="true" lazy="true">
  <key column="PersonID" />
  <one-to-many class="MyDomain.EmploymentRecord, MyDomainAssembly" />
</bag>

这里的所有答案都是正确的,但如果订单太多,您可能还需要使用过滤器,这样您就不必加载所有订单

Customer customer = session.CreateCriteria(...) .SetFetchMode("Orders", FetchMode.Lazy) .UniqueResult<Customer>(); Ilist<Order> orders = session.CreateFilter(customer.Orders," WHERE this.OrderDate < ?") .SetDateTime(...).List(); Customer=session.CreateCriteria(…) .SetFetchMode(“订单”,FetchMode.Lazy) .UniqueResult(); Ilist orders=session.CreateFilter(customer.orders,“WHERE this.OrderDate<?”) .SetDateTime(…).List();
是否希望客户实体具有包含其所有订单的属性? 我认为这可能是一个相当大的收藏。
我认为,你必须问自己的问题是:
我需要多少次直接访问客户的订单?

也许,在这种情况下,您不希望有双向关联?也许您不希望在Customer类中有Orders集合。
然后,我将向我的订单存储库添加一个方法,该方法具有以下签名:

IList<Order> GetOrdersForCustomer( Customer c );
IList GetOrdersForcestomer(客户c);
但是,我不知道这对你的情况是否可行

IList<Order> GetOrdersForCustomer( Customer c );