[英]Automapper - map two objects that have the same type
我有兩個 dto 類:
public class JourneyResponseDto
{
public short Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public JourneyStatusEnum Status { get; set; }
public JourneyTypeEnum Type { get; set; }
public short? StaticSegmentId { get; set; }
public short? DynamicEventId { get; set; }
public long? StartTime { get; set; }
public string BusinessUnit { get; set; }
public long CreatedBy { get; set; }
public long CreateDate { get; set; }
public long? UpdatedBy { get; set; }
public long? UpdateDate { get; set; }
}
public class JourneyDetailsResponseDto : JourneyResponseDto
{
public List<JourneyTreeResponseDto> JourneyTrees { get; set; }
}
在我的 Automapper 中,我創建了一個從實體到基礎 dto 響應的映射並映射每個成員:
CreateMap<Journeys, JourneyResponseDto>()
.ForMember(dto => dto.Id, opt => opt.MapFrom(x => x.Id))
.ForMember(dto => dto.Name, opt => opt.MapFrom(x => x.Name))
.ForMember(dto => dto.Description, opt => opt.MapFrom(x => x.Description))
.ForMember(dto => dto.Status, opt => opt.MapFrom(x => (JourneyStatusEnum)x.StatusId))
.ForMember(dto => dto.Type, opt => opt.MapFrom(x => (JourneyTypeEnum)x.TypeId))
.ForMember(dto => dto.StaticSegmentId, opt => opt.MapFrom(x => x.StaticSegmentId))
.ForMember(dto => dto.StartTime, opt => opt.MapFrom(x => x.StartTime.ToEpoch(true, offsetMinutes)))
.ForMember(dto => dto.BusinessUnit, opt => opt.MapFrom(x => x.BusinessUnit))
.ForMember(dto => dto.DynamicEventId, opt => opt.MapFrom(x => x.DynamicEventId))
.ForMember(dto => dto.CreateDate, opt => opt.MapFrom(x => x.CreateDate.ToEpoch(true, offsetMinutes)))
.ForMember(dto => dto.UpdateDate, opt => opt.MapFrom(x => x.UpdateDate.ToEpoch(true, offsetMinutes)))
.ForMember(dto => dto.CreatedBy, opt => opt.MapFrom(x => x.CreatedBy))
.ForMember(dto => dto.UpdatedBy, opt => opt.MapFrom(x => x.UpdatedBy));
我想為 Journeys to JourneyDetailsResponseDto 創建地圖,但我想避免上面的代碼重復。
如果我這樣做: CreateMap(Journeys, typeof(JourneyResponseDto)) 我得到錯誤
Journeys 是一種類型,在給定的上下文中無效
如果我這樣做: CreateMap(typeof(Journeys), typeof(JourneyResponseDto)) 實體的每個成員都會出錯
“對象不包含 Id 的定義,並且找不到接受“對象”類型的第一個參數的可訪問擴展方法“Id”(您是否缺少 using 指令或程序集引用)
我正在考慮擴展方法,但現在我寧願嘗試對這兩種類型執行通用方法並使用它。
到目前為止,我設法做到了:
private IMappingExpression<Journeys, JourneyResponseDto> MapJourneyToResponseDto(int offsetMinutes)
{
return CreateMap<Journeys, JourneyResponseDto>()
.ForMember(dto => dto.Id, opt => opt.MapFrom(x => x.Id))
.ForMember(dto => dto.Name, opt => opt.MapFrom(x => x.Name))
.ForMember(dto => dto.Description, opt => opt.MapFrom(x => x.Description))
.ForMember(dto => dto.Status, opt => opt.MapFrom(x => (JourneyStatusEnum)x.StatusId))
.ForMember(dto => dto.Type, opt => opt.MapFrom(x => (JourneyTypeEnum)x.TypeId))
.ForMember(dto => dto.StaticSegmentId, opt => opt.MapFrom(x => x.StaticSegmentId))
.ForMember(dto => dto.StartTime, opt => opt.MapFrom(x => x.StartTime.ToEpoch(true, offsetMinutes)))
.ForMember(dto => dto.BusinessUnit, opt => opt.MapFrom(x => x.BusinessUnit))
.ForMember(dto => dto.DynamicEventId, opt => opt.MapFrom(x => x.DynamicEventId))
.ForMember(dto => dto.CreateDate, opt => opt.MapFrom(x => x.CreateDate.ToEpoch(true, offsetMinutes)))
.ForMember(dto => dto.UpdateDate, opt => opt.MapFrom(x => x.UpdateDate.ToEpoch(true, offsetMinutes)))
.ForMember(dto => dto.CreatedBy, opt => opt.MapFrom(x => x.CreatedBy))
.ForMember(dto => dto.UpdatedBy, opt => opt.MapFrom(x => x.UpdatedBy));
}
但是,我無法使用 JourneyDetailsResponseDto,因為這里的任何類型的使用都會引發上述錯誤。
由於Journeys
和JourneyResponseDto
具有相同的屬性名稱,因此無需為每個屬性編寫.ForMember()
,映射器將自動映射它們。
CreateMap<Journeys, JourneyResponseDto>();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.