[英]AutoMapper not mapping nested complex type
我有以下配置。
public class AutoMapperProfile: Profile
{
public AutoMapperProfile()
{
CreateMap<DTO, Model>();
CreateMap<InnerDTO, NavigationPropertyModel>();
}
}
在我的代码中,我有
Model.NavigationProperty = mapper.Map(DTO.InnerDTO, Model.NavigationProperty);
似乎工作得很好但是
Model = mapper.Map(DTO, Model);
没有。 (未映射InnerDTO
)
PS:mapper 是 automapper 的一个实例。
我想坚持第二种方法,因为 DTO 可以拥有比 InnerDTO 更多的属性。
我尝试使用Mapper.AssertConfigurationIsValid();
但有一个例外
System.InvalidOperationException: '映射器未初始化。 使用适当的配置调用 Initialize。 如果您尝试通过容器或其他方式使用映射器实例,请确保您没有对静态 Mapper.Map 方法的任何调用,并且如果您使用的是 ProjectTo 或 UseAsDataSource 扩展方法,请确保您传入适当的 IConfigurationProvider实例。'
尝试为CreateMap<DTO, Model>();
配置子属性CreateMap<DTO, Model>();
.
public AutoMapperProfile()
{
CreateMap<DTO, Model>()
.ForMember(dest => dest.NavigationPropertyModel, opt => opt.MapFrom(src => src.InnerDTO));
CreateMap<InnerDTO, NavigationPropertyModel>();
}
您可能缺少的是在Startup.cs
添加AutoMapperProfile
类。
public void ConfigureServices(IServiceCollection services) {
// Automapper conf
var config = new MapperConfiguration(configure => {
// Add your profile class here
configure.AddProfile(new AutoMapperProfile());
});
// Creating instance of automapper for dependency injection
var mapper = config.CreateMapper();
services.AddSingleton(mapper);
// More complex code here...
}
随后,通过依赖注入,您可以使用 automapper。 在我的特殊情况下,我按以下方式进行:
[Route("api/Permiso")]
[ApiController]
public class PermisoController : ControllerBase {
private readonly IMapper _mapper;
private readonly IBusinessLogicHelper _blh;
public PermisoController(BusinessLogicHelper blh, IMapper mapper) {
_blh = blh;
_mapper = mapper;
}
[HttpGet]
public IActionResult Get() {
try {
// Get raw data from entities
var resultsRaw = _blh.GetDataRaw();
if (resultsRaw == null) {
return NotFound();
}
// Mapping data from entity to DTO
var resultsDTO = _mapper.Map<ReturnDataDTO>(resultsRaw);
return Ok(resultsDTO);
} catch (Exception ex) {
// Custom ObjectResult for InternalServerError
return new InternalServerErrorObjectResult(ex.Message);
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.