我想知道是否有办法告诉NHibernate将数据库中的所有数据提取到对象图中,无论映射文件中的lazy-loading是否设置为true。有这样的功能吗?
答案 0 :(得分:8)
我知道有两个选项:
NHibernateUtil
类例如:
Order fromDb;
using (ISession session = SessionFactory.OpenSession())
{
fromDb = session.Get<Order>(_order.Id);
NHibernateUtil.Initialize(fromDb.Customer);
}
这会强制加载Customer
实体。
fetch
如果您使用HQL来获取实体,只需使用fetch
关键字以强制加载:
from Order o
inner join fetch o.OrderLines
inner join fetch o.Customer
where o.Id = :id
在该示例中,OrderLines
和Customer
将被急切加载。
更多详情here。
答案 1 :(得分:8)
您还可以在标准中为所选集合指定热切提取:
session.CreateCriteria(typeof(Post))
.SetFetchMode("Comments", FetchMode.Eager)
.List();
您还可以将此与Future&lt;&gt;()调用结合使用,以获得更好的效果。