NHibernate (問題があれば SQL Server 2000) に問題があります。
500 を指定しても、NHibernate は 10 に等しいバッチサイズを使用するようです (しかし、10 未満のサイズを指定すると、たとえば 3 - 3 が使用されます)。
<bag name="RiskTypes" table="CalculationQuery" lazy="false" batch-size="50">
<key column="CalculationID"></key>
<many-to-many class="RiskType" column="RiskType"></many-to-many>
</bag>
11 個のアイテムを読み込んでいますが、NHProf で 2 つのクエリを実行していることがわかります。
risktypes0_.CalculationID を Calculat1_1_ として選択し、 risktypes0_.RiskType を RiskType1_ として、 risktype1_.RiskTypeID を RiskTypeID5_0_ として、 risktype1_.RiskTypeName as RiskType2_5_0_ FROM CalculationQuery risktypes0_ 左外部結合 RiskType risktype1_ risktypes0_.RiskType = risktype1_.RiskTypeID について WHERE risktypes0_.CalculationID in (373 /* @p0 */,363 /* @p1 */,364 /* @p2 */,365 /* @p3 */, 366 /* @p4 */,367 /* @p5 */,368 /* @p6 */,369 /* @p7 */, 370 /* @p8 */,371 /* @p9 */)
risktypes0_.CalculationID を Calculat1_1_ として選択し、 risktypes0_.RiskType を RiskType1_ として、 risktype1_.RiskTypeID を RiskTypeID5_0_ として、 risktype1_.RiskTypeName as RiskType2_5_0_ FROM CalculationQuery risktypes0_ 左外部結合 RiskType risktype1_ risktypes0_.RiskType = risktype1_.RiskTypeID について WHERE risktypes0_.CalculationID = 372 /* @p0 */