我一直在寻找如何在AutoMapper
中使用继承,但我努力使其与Linq
充分合作。这里是我的代码:AutoMapper继承和Linq
我在这里所定义的映射我:
CreateMap<Article, ArticleDetailsViewModel>()
.Include<Article, ArticleNewsItemDetailsViewModel();
CreateMap<Article, ArticleNewsItemDetailsViewModel>();
ArticleDetailsViewModel
是一个基类的ArticleNewsItemDetailsViewModel
。
现在,这里却存在着问题,如果我有:
CreateMap<ArticleNewsItem, ArticleNewsItemDetailsViewModel>();
所有视图模型属性
会自动映射,因为它们是相同的名称作为自己的LINQ对象对应。 然而,因为我现在用的是Article => ArticleNewsItemDetailsViewModel
映射这是不可能的,相反,我必须定义每一个为:
.ForMember(x => x.Property1, opt => opt.MapFrom(src => src.ArticleNewsItem.Property1)
我想过从ArticleNewsItemDetailsViewModel
移动所有属性到一个新的视图模式,具有类ArticleNewsItemDetailsViewModel
内的一个属性,只要这两个对象之间存在映射关系,它就可以工作,但它不会很干净。
有什么办法可以避免这样做吗?
我不认为这是可行的,因为它的属性映射到嵌套对象内的属性。不是属性映射到嵌套对象 – ediblecode
对不起,我误解了。如果不通过'.ConstructUsing()'或'.ConvertUsing()'方法创建自定义映射,则无法将对象映射到嵌套属性。你应该真的像映射一样。这是一个很好的例子:http://automapper.codeplex.com/wikipage?title=Nested%20Mappings – NinjaNye
感谢您理解这个问题。但是,不需要在ConstructItem中定义映射,因为可以使用.ForMember和访问嵌套属性完成该映射。 – ediblecode