加载附加到对象的所有实体(忽略延迟加载)

sl3*_*dg3 5 c# nhibernate

我想知道是否有一种方法可以告诉NHibernate将数据库中的所有数据提取到对象图中,无论映射文件中的lazy-loading是否设置为true.有这样的功能吗?

rse*_*nna 8

我知道有两种选择:

使用该NHibernateUtil课程

例如:

Order fromDb;
using (ISession session = SessionFactory.OpenSession())
{
    fromDb = session.Get<Order>(_order.Id);
    NHibernateUtil.Initialize(fromDb.Customer);
}
Run Code Online (Sandbox Code Playgroud)

这将迫使Customer实体加载.

使用HQL fetch

如果您使用HQL来获取实体,只需使用fetch关键字以强制执行加载:

from Order o
inner join fetch o.OrderLines
inner join fetch o.Customer
where o.Id = :id
Run Code Online (Sandbox Code Playgroud)

在这个例子中,OrderLinesCustomer会急于加载.

更多细节在这里.


jis*_*shi 8

您还可以在标准中为所选集合指定急切提取:

session.CreateCriteria(typeof(Post))
.SetFetchMode("Comments", FetchMode.Eager)
.List();
Run Code Online (Sandbox Code Playgroud)

您还可以将此与Future <>()调用结合使用,以获得更好的性能.