+-

我有实体Request和Model 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; }
}
我想为收件人创建映射
CreateMap<Request, RequestModel>()
.ForMember(d => d.Recipients, o => o.MapFrom(s => s.Comments.Select(x => x.UserId )))
但我得到例外:
AutoMapper.AutoMapperMappingException was caught _HResult=-2146233088 HResult=-2146233088 IsTransient=false Message= Mapping types:
Request -> IEnumerable11[[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]
AttManager.Data.Request -> System.Collections.Generic.IEnumerable
Destination path:
RequestModel.Recipients.Recipients
Source value:
AttManager.Data.Request
最佳答案
当您尝试转换IEnumerable< RequestComment>时,就会出现问题.到IEnumerable< int> ;,因此Automapper将尝试查找RequestComment到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.
点击查看更多相关文章
转载注明原文:c#-AutoMapper .ForMember进行收集 - 乐贴网