NHibernate: Ленивая загрузка IUserType - PullRequest
1 голос
/ 02 сентября 2011

Скажем, у нас есть система, в которой хранятся данные о клиентах, и система, в которой хранятся данные о сотрудниках (гипотетическая ситуация!). Когда EmployeeSystem обращается к Employee, доступ к информации о Клиенте осуществляется из ClientSystem с использованием WCF, реализованного в IUserType:

Отображение NHibernate:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
    assembly="EmployeeSystem" namespace="EmployeeSystem.Entities">
   <class name="Employee" table="`Employee`"  >
      <id name="Id" column="`Id`" type="long">
         <generator class="native" />
      </id>
      <property name="Name"/>
      <property 
         name="Client" column="`ClientId`"
         lazy="true"
         type="EmployeeSystem.UserTypes.ClientUserType, EmployeeSystem" /> 
   </class>
</hibernate-mapping>

Реализация IUserType:

public class ClientUserType : IUserType
{
    ...

    public object NullSafeGet(IDataReader rs, string[] names, object owner)
    {
        object obj = NHibernateUtil.Int32.NullSafeGet(rs, names[0]);

        IClientService clientService = new ClientServiceClient();
        ClientDto clientDto = null;

        if (null != obj)
        {
            clientDto = clientService.GetClientById(Convert.ToInt64(obj));
        }

        Client client = new Client
        {
            Id = clientDto.Id,
            Name = clientDto.Name
        };

        return client;
    }

    ...

}

Несмотря на то, что у меня есть свойство lazy = "true", оно загружает клиента, как только загружается сотрудник. Это правильное поведение? Нужно ли самому выполнять отложенную загрузку в NullSafeGet или я что-то упустил?

1 Ответ

0 голосов
/ 02 сентября 2011

Это отношение один-к-одному. Поскольку документация по hibernate предполагает, что это все возможно, в конфигурационном файле xml даже есть опции для включения отложенной загрузки для отношений один-к-одному, но они, по-видимому, не имеют никакого эффекта.

ленивая ассоциация один к одному

...