我正在努力解决这个问题:
我有一个名为“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)将不起作用。
谢谢你, 科斯明
答案 0 :(得分:2)
是的,AutoMapper忽略功能。
Mapper.CreateMap<Source, Destination>()
.ForMember(dest => dest.SomeValuefff, opt => opt.Ignore());