[英]AutoMapper: Mapping with Dictionaries containing different index types
我需要使用AutoMapper将从应用程序数据库中提取的对象数据映射到另一个对象,该对象的类稍有不同。 区别在于名称空间和名为SubMessages的属性,如下所示:
public Dictionary<int, QcMessageBody> SubMessages
{
get { return mSubMessages; }
set { mSubMessages = value;}
}
其中字典关键字是来自数据库(源)的对象中的整数,而目标对象与字符串类型的字典关键字具有相同的属性。
类定义是完全相同的,减去了我已经介绍的差异。
谁能帮助我确定如何设置AutoMapper来将一个对象映射到另一个对象。 我是AutoMapper的新手,恐怕我对AutoMapper的了解不够深,无法进行设置。
谢谢你的帮助。
[Serializable()]
public class MessageProperties : QCProperties, ISerializable
{
public MessageProperties() {}
public Dictionary<string, QcMessageBody> SubMessages
{
get {}
set {}
}
public QcMessageBody CurrentSubMessage
{
get
{}
}
public Boolean IsVarMsg
{
get {}
set {}
}
public Guid SenderId
{
get {}
set {}
}
public String SenderName
{
get {}
set {}
}
public MessageSchedule Schedule
{
get {}
set {}
}
public DateTime TimeSent
{
get {}
set {}
}
public Guid RowQueryId
{
get {}
set {}
}
public Boolean Solo
{
get {}
set {}
}
public List<DestinationTag> Destinations
{
get {}
set {}
}
public MessageType MsgType
{
get {}
set {}
}
}
我找到了解决问题的方法,我想报告一下,希望对其他人使用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>();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.