2013-05-15 5 views
1

У меня проблема с размером партии в nHibernate (C# - VS 2012). Я установил «пакетный размер» в коллекции и в конфиге, но он не работает.nHibernate размер партии не работает

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.

Parent.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> 

ребенка. 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> 

hibernate.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> 

У вас есть идеи, почему размер партии не работает?

ответ

5

Вы неправильно поняли, что означает batch-size.

Это означает, что он будет читать 5 КОЛЛЕКЦИИ ДЕТЕЙ сразу, а не то, что он будет загружать 5 элементов коллекции.

adonet.batch_size, с другой стороны, означает, что инструкции вставки/обновления/удаления будут отправляться группами такого размера, чтобы иметь меньше округлых звонков.

+0

Спасибо за объяснение! –

Смежные вопросы