我可以一次性忽略Automapper属性吗?

时间:2012-11-19 18:31:08

标签: entity-framework automapper

我正在使用Automapper将EF对象映射到DTO;许多物体都是多对多的安排。例如:

committee (table) 1 =< m  committeemember (table)  m >= 1 person (table)

这可能会映射到:

public class CommitteeViewModel
{
    public int idCommittee { get; set; }
    public IEnumerable<CommitteeMemberViewModel> CommitteeMembers { get; set; }
}

public class CommitteeMemberViewModel
{
    public int idCommittee { get; set; }
    public int idCommitteeMember { get; set; }
    public PersonViewModel Members { get; set; }
}

还有<committee, CommitteeViewModel><committeemember, CommitteeMemberViewModel><person, PersonViewModel>的Automapper地图。

当我想要回归一个委员会及其成员时,一切都很顺利。

但是,当我想要一个没有成员的委员会列表时,有没有办法让Automapper忽略某些属性,只是为了那个电话?有点像:

var committeeList = Automapper.Mapper.Map
    <List<committee>, List<CommitteeViewModel>>(committees)
   .Ignore("CommitteeMembers");

当然,我可以创建省略这些属性并映射到那些属性的新DTO,但由于我基本上想要一切一个属性,我认为可能有更好的方法,比如创建一个不同的地图 - 但我找不到它。

谢谢,

克。

1 个答案:

答案 0 :(得分:2)

您可以通过以下方式获得所需的结果:创建新映射(即覆盖现有映射),映射源实体并覆盖映射:

Mapper.CreateMap<committee, CommitteeViewModel>()
      .ForMember(c => c.CommitteeMembers, o => o.Ignore());

var committeeList = Mapper
      .Map<List<committee>, List<CommitteeViewModel>>(committees);

Mapper.CreateMap<committee, CommitteeViewModel>();

但我认为最好保持一致。如果我从委员会映射到CommissionViewModel,我希望每次都会产生相同的结果。因此,最好为'轻型'版本的映射创建新的视图模型。