Nhibernate与Lazy的关联真实

Ami*_*oni 1 nhibernate

我正在开发一个与N Hibernate一起工作的项目.由于性能问题,并在项目的复杂性不断增加,我们需要在我们的code.As大家都知道该做手工协会,我们必须设置懒财产真.我想知道,是他们没有办法做到与true.We已经创建了自己的还是灌装Association.But该方法也需要我们写了许多查询和代码这是不令人满意的集懒属性关联.

请让我知道一些方法.谢谢.

Ste*_*ger 6

默认情况下启用延迟加载.NHibernate实现延迟加载的方式基本上有两种.

  1. 延迟加载集合
  2. 延迟加载"单端"引用(多对一)

收藏很简单直接.无论如何,NHibernate使用它自己的实现,但是在那里实现了延迟加载.

单端引用("正常"关联)并不那么容易.延迟加载在代理中实现.代理是在运行时创建的类,它继承自引用的类.这就是为什么引用类中的所有内容都需要是虚拟的.代理会覆盖每个成员,并确保在从外部访问成员时加载数据.代理的问题是,如果引用基类,则从基类获取代理,并且不能将其向下转发到实际类.因此,对于继承类使用延迟加载时要小心.

默认情况下,Lazy处于启用状态,您需要明确将其关闭.所以你不需要做任何特殊的事情来获得延迟加载.

在优化性能时,还要考虑使用批量获取.

对于单端关联:

<class name="xx" batch-size="10"> 
Run Code Online (Sandbox Code Playgroud)

和集合:

<bag name="xx" .... batch-size="10">
Run Code Online (Sandbox Code Playgroud)

它大大减少了N + 1问题(在这个例子中是10倍).