1

我在 nHibernate(C# - VS 2012)中遇到了批量大小的问题。我在集合和配置中设置了“批量大小”,但它不起作用。

using (var s = OpenSession())
        {
            using (var t = s.BeginTransaction())
            {                   
                Parent parent = s.CreateCriteria(typeof(Parent)).List<Parent>().First();
                Console.Write(parent.Children[0]);
                t.Commit();
            }
        }

nHibernate 分析器显示它一次获取所有孩子(例如 1000 个孩子),但它应该只需要 5 个。

父.hbm.xml:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="L6.Model" assembly="L6">
  <class name="Parent">
    <id name="ParentId">
      <generator class="native" />
    </id>
    <bag name="Children" batch-size="5">
      <key column="ID_Parent"/>
      <one-to-many class="Child"/>
    </bag>
  </class>
</hibernate-mapping>

Child.hbm.xml:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="L6.Model" assembly="L6">
  <class name="Child">
    <id name="ChildId">
      <generator class="native" />
    </id>
    <many-to-one name="Parent" column="ID_Parent" class="Parent" />
  </class>
</hibernate-mapping>

休眠.cfg.xml

<?xml version="1.0" encoding="utf-8"?>
<!-- 
This template was written to work with NHibernate.Test.
Copy the template to your NHibernate.Test project folder and rename it in hibernate.cfg.xml and change it 
for your own use before compile tests in VisualStudio.
-->
<!-- This is the System.Data.dll provider for SQL Server -->
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
    <session-factory>
        <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
        <property name="connection.connection_string">
            Server=.;initial catalog=Lista6;Integrated Security=SSPI
        </property>
    <property name="adonet.batch_size">5</property>
        <property name="show_sql">true</property>
        <property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>
        <property name="command_timeout">60</property>
        <property name="query.substitutions">true 1, false 0, yes 'Y', no 'N'</property>
    <property name="generate_statistics">true</property>
    <mapping file="Child.hbm.xml" />
    <mapping file="Parent.hbm.xml" />
  </session-factory>
</hibernate-configuration>  

你知道为什么批量大小不起作用吗?

4

1 回答 1

6

你误解了什么batch-size意思。

这意味着它将一次读取5 个儿童集合,而不是它会加载集合的 5 个元素。

adonet.batch_size,另一方面,意味着插入/更新/删除语句将按该大小的组发送,以减少往返次数。

于 2013-05-16T12:05:16.787 回答