我有实体Request
和模型RequestModel
public class RequestModel : BaseModel
{
public IEnumerable <int> Recipients { get; set; }
}
public class Request : IIdent
{
public virtual ICollection <RequestComment> Comments { get; set; }
}
public class RequestComment : IIdent
{
[ForeignKey("User")]
public int? UserId { get; set; }
}
我想为Recipients
CreateMap<Request, RequestModel>()
.ForMember(d => d.Recipients, o => o.MapFrom(s => s.Comments.Select(x => x.UserId )))
但我得到例外:
AutoMapper.AutoMapperMappingException被捕获_HResult = -2146233088 HResult = -2146233088 IsTransient = false Message = Mapping类型: 请求 - &gt; IEnumerable
1 AttManager.Data.Request -> System.Collections.Generic.IEnumerable
1 [[System.Int32,mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089]] 目的地路径: RequestModel.Recipients.Recipients 来源价值: AttManager.Data.Request
答案 0 :(得分:3)
当您尝试将IEnumerable<RequestComment>
转换为IEnumerable<int>
时出现问题,因此 Automapper 将尝试在RequestComment
到{{之间找到转换1}},但未定义。
您可以像这样定义从int
到RequestComment
的转换:
int
请求模型之间的映射:
.CreateMap<RequestComment, int>().ConvertUsing(rm => rm.UserId ?? 0);
另外,解决问题的另一种方法是定义.CreateMap<Request, RequestModel>()
.ForMember(d => d.Recipients, o => o.MapFrom(s => s.Comments))
操作:
AfterMap
我只是添加.CreateMap<Request, RequestModel>()
.AfterMap((r, rm) => rm.Recipients = new List<int>(r.Comments.Select(c => c.UserId ?? 0)));
,因为?? 0
类型为UserId
,因此需要将int?
转换为int
属性。