修复 Automapper OData 以获取单个结果

问题描述 投票:0回答:1

我遇到的问题是,在设置 Automapper.Extensions.OData 后,我的 getbyid 为所有值返回 null。我的 GetOrdersAsync 工作正常(扩展和非扩展调用,我需要的所有内容都会返回)

存储库:

public async Task<IEnumerable<OrderDto>> GetOrdersAsync(ODataQueryOptions<OrderDto> options)
{
    return await _context.Orders.GetQueryAsync(_mapper, options);
}

public async Task<OrderDto?> GetOrderByIdMapperAsync(int id)
{
    return await _context.Orders
        .Where(x => x.Id == id)
        .ProjectTo<OrderDto>(_mapper.ConfigurationProvider)
        .SingleOrDefaultAsync();
}

自动映射器

CreateMap<Order, OrderDto>().ForAllMembers(opt => opt.ExplicitExpansion());

控制器

[HttpGet]
public async Task<ActionResult<IEnumerable<OrderDto>>> Get(ODataQueryOptions<OrderDto> options)
{
    var orders = await _orderRepository.GetOrdersAsync(options);
    return Ok(orders);
}

[EnableQuery]
public async Task<ActionResult<OrderDto?>> Get([FromODataUri] int key)
{
    return await _orderRepository.GetOrderByIdMapperAsync(key);
}

DTO

public class OrderDto
{
    public int Id { get; set; }
    public string? Name { get; set; }
    public string? Description { get; set; }

    public string? CategoryName { get; set; } // this is a separate entity (navigation)
    public OrderStatusDto? OrderStatus { get; set; }
}

我还没有更新 GetOrderByIdMapperAsync 的存储库,每当我尝试执行类似 GetQueryAsync 的操作时,它都会返回语法错误,即使在查看文档后也不确定如何执行它。我也可以将选项传递给它吗? (我尝试过,但再次不确定它如何与 SingleOrDefaultAsync 结合)

c# entity-framework odata automapper
1个回答
0
投票

如果“Order”和“OrderDto”类中的属性相同,则映射应该没有问题。我建议的另一种选择是使用 ReverseMap 方法。 你的代码看起来像这样:

自动映射器

CreateMap<Order, OrderDto>().ReverseMap();

有了这个,您可以毫无问题地在两个方向上绘制地图。

© www.soinside.com 2019 - 2024. All rights reserved.