2014-04-04 78 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