我有两个表,具有多对一关系,并且在从数据库中读取所有数据时出现性能问题。
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以便能够以更好的性能读取所有数据?
谢谢!
答案 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);