我有一个应用程序,有一个对象,例如具有每个人的自定义属性的小列表的人员。这个集合通过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