你好,我不能讓我的映射工作繼承類。 想法是僅爲基礎對象和接口創建映射一次,並且當子類實現其自己的成員時,爲那些未在基類或intrface中定義的成員配置映射。Automapper 5.1.1繼承映射
讓我從示例代碼開始。
public class DtoClass {
public string Field1 { get; set; }
public string Field2 { get; set; }
public string Field3 { get; set; }
}
public interface IField3 {
public string EntityField3 { get; set; }
}
public class BaseEntityClass {
public string EntityField1 { get; set; }
}
public class ChildEntityClass : BaseEntityClass, IField3 {
public string EntityField2 { get; set; }
public string EntityField3 { get; set; }
}
CreateMap<BaseEntityClass, DtoClass>()
.ForMember(c => c.Field1 , m => m.MapFrom(a => a.EntityField1))
.Include<ChildEntityClass, DtoClass>();
CreateMap<IField3, DtoClass>()
.ForMember(c => c.Field3 , m => m.MapFrom(a => a.EntityField3));
CreateMap<ChildEntityClass, DtoClass>()
.ForMember(c => c.Field2 , m => m.MapFrom(a => a.EntityField2));
附加碼dosnt work of course。打電話時:
AutoMapper.Mapper.Map<ChildEntityClass, DtoClass>(instanceOfChildEntityClass);
我只得到映射CreateMap<ChildEntityClass, DtoClass>().
任何想法如何實現基類的映射和接口只有一次中定義的成員? 是的,我想將所有類型ChildEntityClass,BaseEntityClass和IField3映射到DtoClass。
任何提示都歡迎優雅配置這種映射。
編輯:我是從子類中刪除unecssary IncludeBase爲清楚起見,但沒有兩者
的 - IncludeBase在子類 - 在基類 對我的作品包含。什麼會導致這樣的問題?
沒有它仍然不起作用,只有調用配置爲最後一次的映射,沒有來自基類的映射。包括在基類中都不適合我。 而另一個問題接口是什麼? 爲了清楚起見,我在示例代碼中刪除了IncludeBase <>。 – PabloPC
確保使用Mapper.AssertConfigurationIsValid()測試您的配置文件。這可能會指出造成問題的原因。 – Richard
使用您的示例代碼使用IncludeBase更新我的答案,它適用於我。 – Richard