表现多对一的关系

时间:2011-02-02 19:43:22

标签: performance nhibernate many-to-one

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

ClassA是ClassB的父级

配置ClassA

  

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

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

配置ClassB

  

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

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

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

当从ClassA请求所有数据时,它运行得很好,但是它非常慢,因为对于ClassA的每个条目,执行sql语句(从ClassB中选择*,其中Id == ClassA.ID)以获得类B.懒惰的标志为真,没有解决方案,因为我需要ClassB的数据。

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

谢谢!

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

query.CreateAlias("ClassB", "B", JoinType.LeftOuterJoin);