我正在努力解决这个问题:
我有一个名为“Project”的NHibernate对象列表.这些对象包含一个延迟加载的“分支”列表.我试图将项目列表传递给WCF服务,所以我使用AutoMapper将它们转换为扁平对象.
问题是,即使名为“ProjectContract”的目标对象不包含分支列表,Automapper仍会调用此集合,并且对数据库进行了大量查询,因为NHibernate触发了延迟加载并为每个加载了Branches集合.项目.
这是类和映射:
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)将不起作用.
谢谢,
科斯明
最佳答案 是的,AutoMapper忽略功能.
Mapper.CreateMap<Source, Destination>()
.ForMember(dest => dest.SomeValuefff, opt => opt.Ignore());