当前位置: 首页 > 编程语言 > C#

我是否正确使用了Automapper2.0的Include功能?Share

时间:2023-04-10 21:46:55 C#

Automapper2.0的Include功能用对了吗?我不是,或者它不工作......我有一个Source类,我想映射到相互继承的多个视图。基类是Detail,子类是Edit或Update,它使用所有与Detail相同的数据,并且有一些额外的字段来管理它自己的列表或其他。这是我正在使用的地图:Mapper.CreateMap().Include().Include().ForMember(dest=>dest.Priority,opt=>opt.MapFrom(src=>src.Priority.Code)).ForMember(dest=>dest.TicketID,opt=>opt.MapFrom(src=>src.ID)).ForMember(dest=>dest.Status,opt=>opt.MapFrom(src=>src.StatusCode)).ForMember(dest=>dest.Category,opt=>opt.MapFrom(src=>src.ProblemCategoryCode)).ForMember(dest=>dest.crmBusCode,opt=>opt.MapFrom(src=>src.Company.crmBusCode)).ForMember(dest=>dest.TeamMembers,opt=>opt.MapFrom(src=>src.Schedules.Where(s=>s.CompleteTime==null)));Mapper.CreateMap().ForMember(m=>m.Schedules,opt=>opt.MapFrom(t=>t.Schedules.Where(s=>s.EmployeeID==Util.CurrentUserID()&&s.CompleteTime==无效的)));映射器.CreateMap();然后,如果我在Mapper.Map(ticket)中将MapFrom与任何未评估的属性一起使用,如果没有设置地图,它们将以它们已有的值结束。那么这里的问题是什么?如果您不想调用Mapper.Map两次,则作为替代解决方案。您可以将Detail的公共映射移动到扩展方法中:(src=>src.Priority.Code))///.....ForMember(dest=>dest.TeamMembers,opt=>opt.MapFrom(src=>src.Schedules.Where(s=>s.CompleteTime==空)));然后在注册Ticket->UpdateandTicket->Editmappers时使用这个扩展方法:Mapper.CreateMap().MapDetailProperties().ForMember(m=>m.Schedules,opt=>opt.MapFrom(t=>t.Schedules.Where(s=>s.EmployeeID==Util.CurrentUserID()&&s.CompleteTime==null)));Mapper.CreateMap().MapDetailProperties();然后你可以像往常一样使用地图:Ticketticket=newTicket();varedit=Mapper.Map(ticket);varupdate=Mapper.Map(ticket);我是否正确使用了Automapper2.0的Include功能?否-当您使用.Include时,AutoMapper期望目标类位于与源类相似的层次结构中(这将在此处进一步讨论)。换句话说,如果您要映射到Ticket的不同子类到Detail、Update和Edit,Include将是合适的。就您而言,这似乎无济于事。我建议使用.Map的重载来获取现有对象并对其进行修改。这样,你只需要为基本类型定义映射即可:以上是C#学习教程:我是否正确使用了Automapper2.0的Include功能?分享的所有内容,如果对你有用,需要进一步了解C#学习教程,希望大家多多关注——Ticketticket=newTicket();编辑edit=newEdit();Mapper.Map(ticket,edit);//编辑现在已经使用基本映射自动映射。Mapper.Map(ticket,edit);//现在已经映射了Edit独有的属性。管理员删除。如需转载请注明出处: