у нас есть отношения один ко многим к одному, которые мы пытаемся реализовать в NHibernate. Это перефразировка вопроса моего коллеги .
Существует Блок с коллекцией GroupPartnerInterests , каждый из которых имеет Company . Следующий метод проверки проходит с SetMaxResults(3)
, но не с SetMaxResults(5)
. Исключение составляет
NHibernate.LazyInitializationException:
Инициализация [Model.EntityClasses.BaseBlock # 100000121437] -failed
лениво инициализировать коллекцию
роль:
Model.EntityClasses.BaseBlock.GroupPartnerInterests,
ни одна сессия не была закрыта.
Вопрос в том, почему аргумент SetMaxResults
имеет значение?
Метод испытаний:
[TestMethod]
public void TestGroupPartnerInterests()
{
using ( ISession session = SessionFactory.OpenSession() )
{
IList<Block> blocks = session
.CreateCriteria( typeof( Block ) )
.SetMaxResults( 5 ).List<Block>();
foreach ( var block in blocks )
{
TestContext.WriteLine( block.BlockId + " " + block.BlockName );
if ( block.GroupPartnerInterests != null )
{
foreach ( var gpi in block.GroupPartnerInterests )
{
TestContext.WriteLine( gpi.Company.CompanyName );
}
}
}
}
}
XML-файлы конфигурации:
<class name="Block" table="[BLOCK]">
<id name="BlockId" column="GA_ID" access="field.camelcase-underscore" >
<generator class="assigned"/>
</id>
... data properties ...
<many-to-one name="Contract" access="field.camelcase-underscore"
fetch="select" unique="true">
<column name="EPC_ID"/>
</many-to-one>
<many-to-one name="Country" access="field.camelcase-underscore"
fetch="select" cascade="none">
<column name="COUNTRY_ID"/>
</many-to-one>
<set name="GroupPartnerInterests" access="field.camelcase-underscore"
cascade="all-delete-orphan" fetch="select">
<key property-ref="GroupId">
<column name="PAR_ID"/>
</key>
<one-to-many class="GroupPartnerInterest"/>
</set>
</class>
<class name="GroupPartnerInterest" table="[GROUP_PARTNER_INTERESTS]">
<composite-id >
<key-property name="GroupId" column="PAR_ID" />
<key-property name="CompanyId" column="PU_ID" />
</composite-id>
... data properties ...
<many-to-one name="Company" access="field.camelcase-underscore"
fetch="select" cascade="none">
<column name="PU_ID"/>
</many-to-one>
</class>
<class name="Company" table="[COMPANY]">
<id name="CompanyId" column="PU_ID" access="field.camelcase-underscore" >
<generator class="assigned"/>
</id>
... data properties ...
<set name="GroupPartnerInterests" access="field.camelcase-underscore"
cascade="all-delete-orphan" inverse="true" fetch="select">
<key>
<column name="PU_ID"/>
</key>
<one-to-many class="GroupPartnerInterest"/>
</set>
</class>