AutoMapper集合中第一个项目与单个属性之间的双向映射

时间:2017-10-24 21:03:37

标签: automapper automapper-6

我正在使用AutoMapper 6.请考虑以下类:

public class Source
{
    public FlattenableClass Flattenable { get; set; }

    public List<EmailAddress> EmailAddresses { get; set; }
}

public class Destination
{
    public string FlattenableProp1 { get; set; }

    public string FlattenableProp2 { get; set; }

    public MappedEmailAddress EmailAddress1 { get; set; }
}

其中FlattenableClass包含名为Prop1Prop2的属性。如您所见,源具有EmailAddress的集合,但目标只需要第一个,因为虽然我们的数据库允许收集电子邮件地址,但应用程序将支持一个。我相信我可以安排从SourceDestination的映射,如下所示:

CreateMap<Source, Destination>()
    .ForMember(d => d.EmailAddress1, opt => opt.ResolveUsing(s => s.EmailAddresses?.FirstOrDefault()));

但不出所料,如果我再打电话给ReverseMap(),它就不知道如何将EmailAddress1映射回EmailAddresses集合。有没有办法让它将EmailAddress1映射回EmailAddress并将其添加到EmailAddresses集合中?

1 个答案:

答案 0 :(得分:0)

我没有在AutoMapper中找到任何支持,但我找到了解决方法。我刚刚在源代码中创建了一个目标属性来为我完成工作:

Source.EmailAddresses

这使AutoMapper可以将Destination.EmailAddresses映射到Destination.EmailAddresses,然后EmailAddress1完成映射到page = request.GET.get('page', 1) print page paginator = Paginator(list(od.iteritems())[:24], 12) try: data = paginator.page(page) except PageNotAnInteger: data = paginator.page(1) except EmptyPage: data = paginator.page(paginator.num_pages) print data save_query_form = SaveQueryForm(request.POST or None) #if request.method == 'POST': if save_query_form.is_valid(): profile = save_query_form.save(commit=False) profile.user = request.user profile.save() context = { "title":"Search", 'data': data,#list(od.iteritems()), 'tools': od_tools.iteritems(), 'methods': od_methods.iteritems(), 'data4': od_data.iteritems(), 'search_phrase': " ".join(instanceValuesString), 'json_dump': js_data, 'form': save_query_form, } return render(request, 'results.html', context) 的工作。这不是理想的,因为我不得不公开电子邮件地址集合的属性,除了自动映射器之外,我不想让任何人使用它,但它完成了它。

相关问题