我遇到了这个问题:
我有一个名为“Project”的NHibernate对象列表。这些对象包含一个延迟加载的“Branches”列表。我正在尝试将项目列表传递给WCF服务,因此我正在使用AutoMapper将它们转换为扁平对象。
问题是,即使目标对象“ProjectContract”不包含分支列表,AutoMapper仍会调用此集合,并且对于每个项目,NHibernate会触发懒惰加载并加载Branches集合,所以会进行大量查询。
以下是类和映射:
我的问题是:有没有办法告诉AutoMapper不要触及“分支”集合,因为我不关心它,而且它是一个会触发许多数据库调用的代理?
我暂时通过MaxDepth(0)解决了这个问题,但还有其他实体有我想要传输的集合和我不想被触及的集合,就像这个一样。在这种情况下,MaxDepth(0)将无法起作用。
谢谢, Cosmin
我有一个名为“Project”的NHibernate对象列表。这些对象包含一个延迟加载的“Branches”列表。我正在尝试将项目列表传递给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不要触及“分支”集合,因为我不关心它,而且它是一个会触发许多数据库调用的代理?
我暂时通过MaxDepth(0)解决了这个问题,但还有其他实体有我想要传输的集合和我不想被触及的集合,就像这个一样。在这种情况下,MaxDepth(0)将无法起作用。
谢谢, Cosmin
int BranchesCount {get;set;}
,我打算稍后设置它。我忘记了AutoMapper是如此聪明以至于可以推断出我希望该属性映射到Project.Branches.Count。抱歉,这是我的过失。我花了两天时间才弄清楚这一点。 - noir