我有以下配置。
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:映射器是自动映射器的实例。
我想坚持使用第二种方法,因为DTO不仅可以具有InnerDTO的更多属性。
我尝试使用Mapper.AssertConfigurationIsValid();
,但遇到了异常
System.InvalidOperationException:'映射器未初始化。呼叫 使用适当的配置进行初始化。如果您尝试使用 通过容器或其他方式的映射器实例,请确保您执行 没有对静态Mapper.Map方法的任何调用,如果您 使用ProjectTo或UseAsDataSource扩展方法,请确保您 传入适当的IConfigurationProvider实例。”
答案 0 :(得分:-1)
可能丢失的是在AutoMapperProfile
中添加Startup.cs
类。
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...
}
随后,通过依赖项注入,您将使用自动映射器。在我的特定情况下,我通过以下方式进行操作:
[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);
}
}
}
答案 1 :(得分:-1)
尝试为CreateMap<DTO, Model>();
配置子属性。
public AutoMapperProfile()
{
CreateMap<DTO, Model>()
.ForMember(dest => dest.NavigationPropertyModel, opt => opt.MapFrom(src => src.InnerDTO));
CreateMap<InnerDTO, NavigationPropertyModel>();
}