Automapper和NHibernate延迟加载

时间:2011-12-03 22:19:21

标签: nhibernate lazy-loading automapper

我正在努力解决这个问题:

我有一个名为“Project”的NHibernate对象列表。这些对象包含一个延迟加载的“分支”列表。我正在尝试将项目列表传递给WCF服务,因此我使用AutoMapper将它们转换为扁平对象。

问题在于,即使名为“ProjectContract”的目标对象不包含分支列表,Automapper仍然会调用此集合,并且对数据库进行了大量查询,因为NHibernate触发了延迟加载并加载了分支每个项目的收集。

以下是类和映射:

    public class Project
    {
     public virtual int ID
     {
        get;
        set;
     }

     public virtual string Name { get; set; }
     public virtual string Description { get; set; }

     public virtual IList<Branch> Branches { get; set; }
    }

  [DataContract]
  public class ProjectContract
  {
    [DataMember]
    public virtual int ID
    {
        get;
        set;
    }

    [DataMember]
    public virtual string Name { get; set; }

    [DataMember]
    public virtual string Description { get; set; }
  }

  public class ProjectMappings : Profile
  {
    protected override void Configure()
    {
        Mapper.CreateMap<Project, ProjectContract>();
    }
  }

我的问题是:有没有办法告诉AutoMapper不要触及“Branches”集合,因为我不关心它,这是一个会触发许多数据库调用的代理?

我用MaxDepth(0)暂时修复了这个问题,但还有其他实体,我有我想要传输的集合,以及我不想触及的集合,比如这个。在这种情况下,MaxDepth(0)将不起作用。

谢谢你, 科斯明

1 个答案:

答案 0 :(得分:2)

是的,AutoMapper忽略功能。

Mapper.CreateMap<Source, Destination>()
    .ForMember(dest => dest.SomeValuefff, opt => opt.Ignore());