[英]Automapper 5.1.1 inheritance mapping
您好我無法讓我的映射為繼承的類工作。 想法是只為基礎對象和接口創建一次映射,當子類實現自己的成員時,為那些未在基類或基礎中定義的成員配置映射。
讓我從示例代碼開始。
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工作的課程。 打電話時:
AutoMapper.Mapper.Map<ChildEntityClass, DtoClass>(instanceOfChildEntityClass);
我只獲得在CreateMap<ChildEntityClass, DtoClass>().
中定義的映射成員CreateMap<ChildEntityClass, DtoClass>().
知道如何只為基類和接口實現一次映射嗎? 是的,我想將所有類型ChildEntityClass,BaseEntityClass和IField3映射到DtoClass。
任何提示都歡迎優雅配置這樣的映射。
編輯:為了清楚起見,我從子類中刪除了不必要的IncludeBase,但兩者都沒有
- 子類中的IncludeBase - 包含在基類Works中。 什么會導致這樣的問題?
你不應該使用.IncludeBase
AND .Include
- 選擇一個並堅持下去。 我更喜歡.IncludeBase
,因為我認為在子類中定義更有意義。 在您的情況下,您不能使用Include引用IField3,因為沒有隱式轉換。
以下代碼對我使用IncludeBase
CreateMap<BaseEntityClass, DtoClass>()
.ForMember(dest => dest.Field1, opt => opt.MapFrom(src => src.EntityField1))
;
CreateMap<IField3, DtoClass>()
.ForMember(dest => dest.Field3, opt => opt.MapFrom(src => src.EntityField3))
;
CreateMap<ChildEntityClass, DtoClass>()
.ForMember(dest => dest.Field2, opt => opt.MapFrom(src => src.EntityField2))
.IncludeBase<BaseEntityClass, DtoClass>()
.IncludeBase<IField3, DtoClass>()
;
由於經常發生問題超出了我在示例代碼中提供的范圍。
在我的項目初始化方法中隱藏了類似的調用:
foreach (string propName in map.GetUnmappedPropertyNames())
{
expr.ForMember(propName, opt => opt.Ignore());
}
因此,即使在調用基類型的映射時,也會自動忽略未在子類中映射的所有列。 簡單而有問題。
上面的代碼可能適用於Mapper.Configuration.AssertConfigurationIsValid();
通過。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.