首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NHibernate:延迟加载IUserType

NHibernate:延迟加载IUserType
EN

Stack Overflow用户
提问于 2011-09-03 00:00:16
回答 1查看 360关注 0票数 1

假设我们有一个存储客户详细信息的系统,以及一个存储员工详细信息的系统(假设情况!)。当EmployeeSystem访问员工时,将使用IUserType中实现的WCF从ClientSystem访问客户端信息:

NHibernate映射:

代码语言:javascript
复制
<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实现:

代码语言:javascript
复制
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中实现延迟加载吗?还是我遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-09-03 00:37:20

这是一对一的关系吗?正如hibernate文档所暗示的那样,这一切都是可能的,在xml配置文件中甚至出现了打开延迟加载以实现一对一关系的选项,但它们显然没有任何效果。

one-to-one lazy association

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7286132

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档