【发布时间】:2020-10-08 23:58:54
【问题描述】:
我有以下型号:
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 异常:
'参数类型不匹配'
什么不正确?
【问题讨论】:
-
你是否暗示异常是由类型转换器引起的?如果有,为什么?
-
复制会有所帮助。创建一个gist,我们可以执行并看到失败。
-
@devNull 因为如果我添加忽略
State字段(或重命名),它工作正常 -
@LucianBargaoanu 我得到了以下信息:
DeviceSuspensionRequest -> RequestDto (Destination member list)\r\nTms.Core.Domain.Devices.DeviceSuspensionRequest -> Tms.Core.Dto.DeviceManagement.RequestDto (Destination member list)\r\n\r\n -
这有什么关系?你可以做一个repro吗?
标签: c# type-conversion automapper data-conversion