IQueryable.ProjectTo扩展方法中未使用注入的配置文件



我有一个返回IQueryable的方法,在该方法中它调用IQueryable.ProjectTo扩展方法。我能够将实体/数据库对象中具有不同名称的字段映射到DTO,但仅当在方法中创建配置映射的实例时。然而,当我试图通过IMapper注入具有相同配置映射的概要文件类时,代码运行时没有错误,但没有映射具有不同名称的字段,即SellCyRate。

我已经查看了automapper文档,看不出问题出在哪里。有人能提供建议吗?

我正在使用

  1. AutoMapper v11.0.1
  2. AutoMapper.Extensions.Microsoft.DependencyInjection v11.0.0
  3. EF Core 6

请在下面找到我的设置:

TradeListDtoProfile.cs

public class TradeListDtoProfile : Profile
{
public TradeListDtoProfile()
{
CreateMap<Deal, TradeListDto>()
.ForMember(dest => dest.SellCCYRate, opt => opt.MapFrom(src => src.RateValueFrom));
}
}

Startup.cs-配置服务方法


public void ConfigureServices(IServiceCollection services) {
services.AddAutoMapper(typeof(TradeListDtoProfile));
}

Controller.cs

public class TradeController: ControllerBase {
private readonly EfCoreContext _efCoreContext;
private readonly IMapper _mapper;
public TradeController(EfCoreContext efCoreContext, IMapper mapper) {
_efCoreContext = efCoreContext;
_mapper = mapper
}
public List < TradeListDto > RetrieveTrade() {
var tradeService = new DisplayTradesService(_efCoreContext);
return tradeService.FilterSortPage(_mapper);
}
}

DisplayTradesServices.cs

public class DisplayTradesService
{
private readonly EfCoreContext _context;
public DisplayTradesService(EfCoreContext context)
{
_context = context;
}
public List<TradeListDto> FilterSortPage(SortFilterPageOptions options, IMapper mapper)
{
return _context.Deal
.AsNoTracking()
.MapTradeToDto(mapper).ToList();
}
}

交易清单DtoSelect.cs


public static class TradeListDtoSelect
{
public static IQueryable<TradeListDto> MapTradeToDto(this IQueryable<Deal> deals, IMapper mapper)
{
//var configuration = new MapperConfiguration(cfg => cfg.CreateMap<Deal, TradeListDto>()
//.ForMember(dest => dest.SellCCYRate, opt => opt.MapFrom(src => src.RateValueFrom)));
//deals.ProjectTo<TradeListDto>(configuration); // This works
return deals.ProjectTo<TradeListDto>(mapper.ConfigurationProvider); // This doesn't
}
}

对于同一映射,不能将属性映射与fluent API混合使用。从DTO类中删除该属性。

该属性似乎覆盖了您的fluent配置。

最新更新