我有一個應用程序,有一個對象,例如具有每個人的自定義屬性的小列表的人員。這個集合通過nhibernate懶惰地加載,9/10次它只能爲一個人裝載,而不是IList。NHibernate的 - 加載100.000記錄每個與一個小的懶加載集合
這1/10,雖然我需要做一個導出到Excel數據庫中的所有的人,我需要包括它們的自定義屬性。因此,如果我對此正確(並在下面給出映射),nhibernate將針對100.000記錄和100.000查詢爲其自定義屬性發出1個查詢。
有什麼辦法發出2個查詢 - 1的記錄和1對所有的自定義屬性 - 並且NHibernate的創建正確的對象?或者可能只是爲了避免這種N + 1問題?
底層的數據庫是SQL Server 2008和應用程序是一個ASP.NET MVC應用程序
Person的映射是
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> <class name="Core.Person, Core" table="people" optimistic-lock="none">
<id name="ID" column="id" type="System.Guid" unsaved-value="00000000-0000-0000-0000-000000000000">
<generator class="guid" />
</id>
<many-to-one name="Company" column="company_id" not-null="true" fetch="join" />
<property name="Name" column="name" type="String" />
<property name="DoB" column="dob" type="DateTime" not-null="true" />
<map name="CustomFields" lazy="true" table="custom_fields" cascade="all-delete-orphan">
<key column="person_id" />
<index column="name" type="System.String" />
<element column="value" type="System.String" />
</map>
</class> </hibernate-mapping>
此,如果您啓用查詢第二級緩存是唯一的真。如果你不這樣做,NHibernate仍然會向db發出查詢,然後檢查緩存並給你緩存的對象。 – Vadim 2011-04-21 14:06:40