问题描述
我有以下型号:
public class DeviceSuspensionRequest : BaseEntity
{
//.....
public DeviceSuspensionRequestState State { get; set; }
//.....
}
public class RequestDto : BaseEntity
{
//.....
public RequestStatusDto State { get; set; }
//.....
}
以及以下AutoMapper配置文件类:
public class AutoMapperEFRequest : AutoMapper.Profile
{
public AutoMapperEFRequest()
{
CreateMap<DeviceSuspensionRequestState,RequestStatusDto>().ConvertUsing<SuspensionStatusConverter>();
CreateMap<DeviceSuspensionRequest,RequestDto>()
//.....
;
}
public class SuspensionStatusConverter : ITypeConverter<DeviceSuspensionRequestState,RequestStatusDto>
{
public RequestStatusDto Convert(DeviceSuspensionRequestState source,RequestStatusDto destination,ResolutionContext context)
{
switch (source)
{
case DeviceSuspensionRequestState.RequestSuspensionState:
return RequestStatusDto.RequestActive;
break;
case DeviceSuspensionRequestState.SuspendedState:
return RequestStatusDto.Accepted;
break;
case DeviceSuspensionRequestState.RequestReactivationState:
return RequestStatusDto.ReactivationRequest;
break;
case DeviceSuspensionRequestState.ReactivatedState:
return RequestStatusDto.Reactivated;
break;
case DeviceSuspensionRequestState.CancelBySuperadminState:
return RequestStatusDto.Cancelled;
break;
case DeviceSuspensionRequestState.CancelByCompanyadminState:
return RequestStatusDto.Cancelled;
break;
default:
return RequestStatusDto.UnkNown;
break;
}
}
}
}
地图:
_mapperConfig = new MapperConfiguration(cfg =>
{
cfg.AddProfile<AutoMapperEFRequest>();
});
_mapperConfig.AssertConfigurationIsValid();
已通过
但是当我尝试执行以下操作时:
var query =
(from suspensionRequest in _context.DeviceSuspensionRequests select suspensionRequest).ProjectTo<RequestDto>(_mapperConfig)
.OrderBy(p => p.RequestDateTime)
;
它引发以下ArgumentException异常:
“参数类型不匹配”
什么不正确?
解决方法
在AM 10中,ProjectTo
将默认使用基础数字值映射您的枚举,因此,如果这些值匹配,则该映射将在没有类型转换器的情况下工作。否则,您需要基于Expression
的{{1}}重载。正如the docs所说,任何其他重载都仅对ConvertUsing
有效。