0

我有两个表,具有多对一关系,从数据库读取所有数据时出现性能问题。

ClassA 是 ClassB 的父级

配置类A

<id name="Id">
  <generator class="native" />
</id>

<property name="FieldA1" column="FieldA1" />
<many-to-one name="ClassB" column="ClassBId" />

配置类 B

<id name="Id">
  <generator class="native" />
</id>

<property name="FieldB1" column="FieldB1"/>

我想要一个 classA 对象的列表,其中 ClassA 对象一次包含一个 classB 对象。

从ClassA请求所有数据时,效果很好,但是速度很慢,因为对于ClassA的每一个条目,都会执行一条sql语句(select * from ClassB where Id==ClassA.ID)来获取B类。设置惰性标志为真,没有解决方案,因为我需要 ClassB 的数据。

有人知道如何获得 NHibernate 以便以更好的性能读取所有数据吗?

谢谢 !

4

2 回答 2

1

您应该能够将 FetchMode 设置为 FetchMode.Join,然后它将向数据库发送一个查询。有关可能为您指明正确方向的示例,请参阅http://davidhayden.com/blog/dave/archive/2008/12/06/ImprovingNHibernatePerformanceFetchingStrategiesFetchModeFluentNHibernate.aspx 。

于 2011-02-02T20:01:49.110 回答
0

在编写查询时,您还可以指定连接类型,以防并非所有 ClassA 都有 ClassB。

query.CreateAlias("ClassB", "B", JoinType.LeftOuterJoin);
于 2011-02-08T20:46:38.737 回答