2014-04-04 47 views
0

我将lazy="false"设置为集合并且fetch="select",但我不明白为什么NHibernate会一直加载我的集合。NHibernate惰性加载= false

这是我的映射:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" 
    namespace="Ortopedia.Entidades" assembly="Ortopedia"> 
    <class name="Especialidade" table="TB_ESPECIALIDADE"> 
    <id name="Id"> 
     <column name="ID_ESPECIALIDADE" not-null="true" /> 
     <generator class="increment" /> 
    </id> 
    <property name="Nome" column="NOME" not-null="true" length="50" /> 
    <set inverse="true" name="SubEspecialidades" cascade="none" fetch="select" lazy="false" > 
     <key column="ID_ESPECIALIDADE" /> 
     <one-to-many class="Ortopedia.Entidades.SubEspecialidade" /> 
    </set> 
    </class> 
</hibernate-mapping> 

这是我使用清单数据的代码:

ICriteria criteria = session.CreateCriteria(typeof(T)); 
criteria.SetMaxResults(1000); 
IList<T> list = criteria.List<T>(); 
return list; 

NHibernate负载我SubEspecialidades财产,我不希望它加载。我在这里错过了什么?

回答

2

如果你不想SubEspecialidades最初加载,你应该使用:

lazy="true" 

延迟加载意味着,直到你在你的代码中访问它集合不能从数据库中获取。因此,如果将其设置为false,则会将其与其父对象(无论拥有该集合)一起提取。

+0

@slavoo谢谢。我还是新来的stackoverflow。忘了使用代码块。 – t3sture

+0

真的不知道,为什么在这里downvote?!?我会说** t3sture **是正确的。所以我+1,因为我建议相同。 –

+0

我认为他只是低估了我作为一个纠正措施,以确保我将来使用代码块。我宁愿相信,只相信他只是卑鄙。 – t3sture