我正在使用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
包含名为Prop1
和Prop2
的属性。如您所见,源具有EmailAddress
的集合,但目标只需要第一个,因为虽然我们的数据库允许收集电子邮件地址,但应用程序将支持一个。我相信我可以安排从Source
到Destination
的映射,如下所示:
CreateMap<Source, Destination>()
.ForMember(d => d.EmailAddress1, opt => opt.ResolveUsing(s => s.EmailAddresses?.FirstOrDefault()));
但不出所料,如果我再打电话给ReverseMap()
,它就不知道如何将EmailAddress1
映射回EmailAddresses
集合。有没有办法让它将EmailAddress1
映射回EmailAddress
并将其添加到EmailAddresses
集合中?
答案 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)
的工作。这不是理想的,因为我不得不公开电子邮件地址集合的属性,除了自动映射器之外,我不想让任何人使用它,但它完成了它。