我目前正在使用NHibernate读取50k 行的块。大约需要20 分钟。要读取的数据是通过在 SQLSERVER 2005 中加入超过5 个表来准备的。我主要关心的是 NHibernate为每个行检索准备一个新查询,这非常耗时。
我知道这是必要的,因为 NHibernate 必须将每一行映射到一个对象,但这种方法在阅读是主要关注点的情况下是无用的。
我不能使用无状态会话,因为我使用集合来存储数据
我还需要通过参数应用一些过滤器。我也实现了存储过程,但不知何故没有帮助。
有没有其他方法可以处理大量数据。
------编辑-------
这是我用来映射的两个配置文件
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="myNameSpace" assembly="myNameSpace">
<class name="MyClass" table="TableNameFromDb">
<id name="ID" column="ID">
<generator class="native" />
</id>
<property name="prop1"/>
<property name="prop2"/>
<bag name="bag1" cascade="all-delete-orphan" inverse="false" fetch="join" lazy="false">
<key column="prop1"/>
<one-to-many class="MyClass2" />
</bag>
</class>
</hibernate-mapping>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="myNameSpace" assembly="myNameSpace">
<class name="MyClass2" table="TableNameFromDb2">
<id name="prop2" column="ID">
<generator class="native" />
</id>
<property name="prop2"/>
<property name="prop3"/>
</class>
</hibernate-mapping>
现在这里主要关注的是 NHibernate 正在为每一行创建一个新查询并将其发送到数据库,这是一种开销。