我一直在尋找如何在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