我找到了解决我的问题的方法,我想报告这个问题,希望能在其他人使用 AutoMapper 时帮助他们。首先,我试图映射错误的对象。在更好地检查代码后,我确定我需要映射一个具有以下多级继承配置的类。
public class MessageInsert : ISerializable, ICloneable {}
public class DateTimeInsert : MessageInsert {}
public class TimeStampInsert : DateTimeInsert, ISerializable {}
public class DateStampInsert : DateTimeInsert, ISerializable {}
public class ClockInsert : DateTimeInsert, ISerializable {}
public class CalendarInsert : DateTimeInsert, ISerializable {}
public class DataInsert : MessageInsert, ISerializable {}
public class TokenInsert : DataInsert, ISerializable {}
public class VariableInsert : DataInsert, ISerializable {}
我需要映射一个 MessageInsert 对象,并将子级别的所有属性映射到新对象。AutoMapper 处理继承映射,但必须使用 CreateMap 语句以特定方式设置。我在下面使用的 CreateMap 语句是我设置映射的方式,它们似乎可以工作。如果有人看到更好的方法来做这些,并想通过各种方式加入。
第一个语句块用于处理具有与其关联的名称空间的不同类、枚举、结构等的名称空间映射。
AutoMapper.Mapper.CreateMap<ABC.QC.Properties.MessageSchedule, DBWebAgent.Properties.MessageSchedule>();
AutoMapper.Mapper.CreateMap<ABC.QC.Properties.DashPropType, DBWebAgent.Properties.DashPropType>();
AutoMapper.Mapper.CreateMap<ABC.QC.Properties.MessageType, DBWebAgent.Properties.MessageType>();
AutoMapper.Mapper.CreateMap<ABC.QC.Properties.DestinationTag, DBWebAgent.Properties.DestinationTag>();
AutoMapper.Mapper.CreateMap<ABC.QC.Properties.QcMessageBody, DBWebAgent.Properties.QcMessageBody>();
AutoMapper.Mapper.CreateMap<ABC.QC.Properties.DataInsertThreshold, DBWebAgent.Properties.DataInsertThreshold>();
AutoMapper.Mapper.CreateMap<ABC.QC.Properties.QuickCOMAlarm, DBWebAgent.Properties.QuickCOMAlarm>();
AutoMapper.Mapper.CreateMap<ABC.QC.Properties.ScrollEffectType, DBWebAgent.Properties.ScrollEffectType>();
AutoMapper.Mapper.CreateMap<ABC.QC.Properties.MessagePriorityType, DBWebAgent.Properties.MessagePriorityType>();
AutoMapper.Mapper.CreateMap<ABC.QC.Properties.QcMessageSegment, DBWebAgent.Properties.QcMessageSegment>();
AutoMapper.Mapper.CreateMap<ABC.QC.Properties.DateTimeInsert, DBWebAgent.Properties.DateTimeInsert>();
AutoMapper.Mapper.CreateMap<ABC.QC.Properties.DateStampInsert, DBWebAgent.Properties.DateStampInsert>();
AutoMapper.Mapper.CreateMap<ABC.QC.Properties.TimeStampInsert, DBWebAgent.Properties.TimeStampInsert>();
AutoMapper.Mapper.CreateMap<ABC.QC.Properties.ClockInsert, DBWebAgent.Properties.ClockInsert>();
AutoMapper.Mapper.CreateMap<ABC.QC.Properties.CalendarInsert, DBWebAgent.Properties.CalendarInsert>();
AutoMapper.Mapper.CreateMap<ABC.QC.Properties.DataInsert, DBWebAgent.Properties.DataInsert>();
AutoMapper.Mapper.CreateMap<ABC.QC.Properties.VariableInsert, DBWebAgent.Properties.VariableInsert>();
AutoMapper.Mapper.CreateMap<ABC.QC.Properties.TokenInsert, DBWebAgent.Properties.TokenInsert>();
第二组 CreateMap 语句被定义为处理类中的所有继承级别。
AutoMapper.Mapper.CreateMap<ABC.QC.Properties.MessageInsert, DBWebAgent.Properties.MessageInsert>()
.Include<ABC.QC.Properties.DateTimeInsert, DBWebAgent.Properties.DateTimeInsert>()
.Include<ABC.QC.Properties.DateStampInsert, DBWebAgent.Properties.DateStampInsert>()
.Include<ABC.QC.Properties.TimeStampInsert, DBWebAgent.Properties.TimeStampInsert>()
.Include<ABC.QC.Properties.ClockInsert, DBWebAgent.Properties.ClockInsert>()
.Include<ABC.QC.Properties.CalendarInsert, DBWebAgent.Properties.CalendarInsert>()
.Include<ABC.QC.Properties.DataInsert, DBWebAgent.Properties.DataInsert>()
.Include<ABC.QC.Properties.VariableInsert, DBWebAgent.Properties.VariableInsert>()
.Include<ABC.QC.Properties.TokenInsert, DBWebAgent.Properties.TokenInsert>();