以下是我在 startUp.cs
中设置自动映射器的方法
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddDbContext<BikeStoreContext>(
options => options.UseSqlServer(Configuration.GetConnectionString("bikeStore")));
services.AddScoped<ICustomerRepository, CustomerRepository>();
services.AddAutoMapper(typeof(CustomerProfile));
}
profile.cs
public class CustomerProfile : Profile
{
public CustomerProfile()
{
CreateMap<Customer,CustomerDto>();
CreateMap<CustomerDto, Customer>();
}
}
CustomerDto.cs
public class CustomerDto
{
public int CustomerId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Phone { get; set; }
public string Email { get; set; }
public string Street { get; set; }
public string City { get; set; }
public string State { get; set; }
public string ZipCode { get; set; }
}
}
这是我存储库中的 getCustomers
函数
public async Task<IEnumerable<Customer>> GetCustomers()
{
return await _context.Customers.ToListAsync();
}
我在控制器中使用 autoMapper 如下
[HttpGet]
public async Task<IActionResult> GetAsync ()
{
var result = await _repo.GetCustomers();
return Ok(_mapper.Map<CustomerDto>(result));
}
尝试将 Customer 映射到 CustomerDto 时出现以下错误
AutoMapperMappingException: Missing type map configuration or unsupported mapping.
我尝试如下更改 startUp.cs 中的配置,但没有成功。
var mapperConfig = new MapperConfiguration(mc =>
{
mc.AddProfile(new CustomerProfile());
});
IMapper mapper = mapperConfig.CreateMapper();
services.AddSingleton(mapper);
我在这里做错了什么?
答案 0 :(得分:1)
Repository 返回 IEnumerable<Customer>
并且您正在尝试将其映射到单个 CustomerDTO
,您需要映射到集合,例如 List
或只是另一个 IEnumerable
:>
return Ok(_mapper.Map<List<CustomerDto>>(result));