我正在尝试在域对象和视图模型之间创建一个映射,以支持一个感觉很常见的用例。我找不到解决方案的事实使我认为我正在错误地解决问题。这是一些代表我的源和目标类型的伪代码:
public class DomainClass
{
public NestedDomainClass1 NestedDomainClass1{ get; set; }
}
public class NestedDomainClass1
{
public NestedDomainClass2 NestedDomainClass2 { get; set; }
}
public class NestedDomainClass2
{
public string PropertyA { get; set; }
public string PropertyB { get; set; }
public string PropertyC { get; set; }
}
public class DomainViewModel
{
public string PropertyA { get; set; }
public string PropertyB { get; set; }
public string PropertyC { get; set; }
}
如您所见,DomainViewModel
完美地映射到DomainClass.NestedDomainClass1.NestedDomainClass2
. 但是,由于不完全相关的原因,我不能简单地在该级别创建映射。相反,我必须映射更高的两个级别:
Mapper.CreateMap<DomainObj, DomainViewModel>();
不幸的是,在我这样做的那一刻,我不能再依赖 AutoMapper 约定来自动映射类似命名的属性,并且我不得不编写大量高度重复的代码:
Mapper.CreateMap<DomainClass, DomainViewModel>().ForMember(dest=>dest.PropertyA, opt=>opt.MapFrom(source=>source.NestedDomainClass1.NestedDomainClass2.PropertyA));
Mapper.CreateMap<DomainClass, DomainViewModel>().ForMember(dest=>dest.PropertyB, opt=>opt.MapFrom(source=>source.NestedDomainClass1.NestedDomainClass2.PropertyB));
我玩过RecognizeDestinationPrefixes
andRecognizeDestinationPostfixes
方法,希望让 AutoMapper 直接“跳过”到我想从 ( NestedDomainClass2
) 映射的属性,但没有运气。任何帮助,将不胜感激!