【发布时间】:2012-11-19 18:31:08
【问题描述】:
我正在使用 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,但由于我本质上想要所有 但一个属性,我认为可能有更好的方法,比如创建一个不同的地图——但我找不到它。
谢谢,
g.
【问题讨论】:
-
AFAIK 您无法在“map-time”指定映射例外。您可以做的是为成员映射指定条件,例如
ForMember(d => d.Items, opt => opt.Condition(s => s.Count > 4))。不确定这是否对您的情况有帮助...
标签: entity-framework automapper