Asp.net core mvc 映射两个相同的模型,使用automapper嵌套
我做了一些研究,但找不到我想要的东西 我有无尽的菜单。我有一个MenuDTO和一个MenuViewModel,用于此菜单。我在模型和DTO之间的匹配没有问题,但在将DTO映射到ViewModel时遇到了问题。显然我找不到解决办法,你能帮忙吗 我的菜单对象Asp.net core mvc 映射两个相同的模型,使用automapper嵌套,asp.net-core-mvc,mapping,automapper,asp.net-core-3.0,Asp.net Core Mvc,Mapping,Automapper,Asp.net Core 3.0,我做了一些研究,但找不到我想要的东西 我有无尽的菜单。我有一个MenuDTO和一个MenuViewModel,用于此菜单。我在模型和DTO之间的匹配没有问题,但在将DTO映射到ViewModel时遇到了问题。显然我找不到解决办法,你能帮忙吗 我的菜单对象 public class MenuDto : BaseDto { public string Name { get; set; } public string Icon { get; set; }
public class MenuDto : BaseDto
{
public string Name { get; set; }
public string Icon { get; set; }
public string Order { get; set; }
public string Url { get; set; }
public bool IsVisible { get; set; }
public int ParentId { get; set; }
public MenuDto ParentMenu { get; set; }
public List<MenuDto> Menus { get; set; }
}
错误消息暗示-AutoMapper无法在
MenuDto
和MenuViewModel
之间映射,或者无法定位已定义的映射
我已经测试了你的映射,它们都很好。所以,剩下的可能性是AutoMapper无法定位您的映射
我假设您在评论部分提到的业务层
和UI层
是两个独立的项目。由于WebProfile
是在UI层中定义的,因此您必须告诉AutoMapper它应该搜索该程序集以查找映射。由于您在模型和DTO之间的映射工作正常,我可以猜您已经对业务层中定义的业务概要文件
执行了相同的操作
我不知道您现有的代码,但您可以这样做-在启动中。Configure
方法添加/修改以下行-
services.AddAutoMapper(typeof(IDtoMapping)、typeof(IViewModelMapping));
其中,IDtoMapping
和IViewModelMapping
分别是在业务层
和UI层
中声明的两个标记接口(空接口,仅用于标识声明它们的程序集)。在BaseDto中有什么?BaseDto有Id、DateCreated、DateModified字段,我是活动的。我看不出映射有任何问题。请在这里纠正输入错误-\u mapper.Map抱歉,尽管该行有-\u mapper.Map(\u menuService.GetNavMenus());但我一直收到相同的错误
您是否选中了\u menuService.getnavmenumes()
?是否正在返回列表
?很抱歉响应太晚,我用与您提到的类似的方法解决了问题。谢谢你的支持。
public class MenuViewModel
{
public int Id { get; set; }
public bool IsActive { get; set; }
public string Name { get; set; }
public string Icon { get; set; }
public string Order { get; set; }
public string Url { get; set; }
public bool IsVisible { get; set; }
public int ParentId { get; set; }
public MenuViewModel ParentMenu { get; set; }
public List<MenuViewModel> Menus { get; set; }
}
public class WebProfile : Profile
{
public WebProfile()
{
CreateMap<MenuDto, MenuViewModel>();
CreateMap<MenuViewModel, MenuDto>();
}
}
var navMenuItems = _mapper.Map<List<MenuViewModel>(_menuService.GetNavMenus());
AutoMapperMappingException: Missing type map configuration or unsupported mapping.
Mapping types:
MenuDto -> MenuViewModel
BiPortal2020.Business.ServiceDTOs.Menu.MenuDto -> BiPortal2020.WebUI.Areas.Admin.Models.Menu.MenuViewModel
lambda_method(Closure , MenuDto , MenuViewModel , ResolutionContext )
AutoMapperMappingException: Error mapping types.
Mapping types:
Object -> List`1
System.Object -> System.Collections.Generic.List`1