在ASP.NET核心和EF核心中使用automapper.collection不会更新集合中的已编辑记录

时间:2018-07-27 01:25:08

标签: asp.net-core collections entity-framework-core automapper aspnetboilerplate

我正在使用asnet生成器,aspnet核心和ef核心。我已经在PreInitialize中初始化了automapper.collection,如下所示:

Configuration.Modules.AbpAutoMapper().Configurators.Add(
    cfg =>{
        cfg.AddCollectionMappers();
        cfg.CreateMap<OrderDTO, Order>().EqualityComparison((odto, o) => odto.ID == o.ID);
        cfg.CreateMap<OrderItemDTO, OrderItem>().EqualityComparison((odto, o) => odto.ID == o.ID);
    }
);

我正在使用ObjectMapper.Map(odto,o);可以在dto和实体之间进行映射,但是我发现订单中的orderitems集合中的新orderitem保存得很好,但是对现有条目的任何编辑似乎都不会更新到db。

使用以下命令从存储库加载订单实体和集合:

var @item = await _orderRepository.GetAll().Include(x => x.Items).Include(x => x.Items).ThenInclude(x => x.Product).AsNoTracking().FirstOrDefaultAsync(x => x.Id == id);

这是Update方法:

    public override async Task<OrderDto> Update(OrderDto input)
    {
        var ord = await _orderManager.GetA(input.Id);

        ObjectMapper.Map(input, ord);

        CheckErrors(await _orderManager.UpdateA(ord));

        return MapToEntityDto(await _orderManager.GetA(input.Id));
    }

尝试更新订单项记录时,输入和ord变量的值如下:

    input   {OrderDto}  
    Code    "1" string
    Id  1   int
    Items   Count = 1   System.Collections.Generic.ICollection<OrderItemDto>
    -       [0] {OrderItemDto}  
                Id  1   int
                OrderId 1   int
        +       Product {ProductLoadDto}
                ProductId   4   int
                Quantity    22  double
    MovementDate    {28-Jul-18 2:36:41 AM}  System.DateTime


    ord {[Order 1]} Order
    Code    "1" string
    Id  1   int
    Items   Count = 1   System.Collections.Generic.ICollection<OrderItem>
    -       [0] {OrderItem 1}
            Id  1   int
            OrderId 1   int
    +       Product {[Product 4]}   Venues.Products.Product
            ProductId   4   int
            Quantity    1   double
    MovementDate    {28-Jul-18 12:06:41 PM} System.DateTime

是否缺少使automapper.collection自动处理集合编辑的功能?

2 个答案:

答案 0 :(得分:0)

您是否尝试过Entity Framework Core存储库?

https://github.com/AutoMapper/AutoMapper.Collection.EFCore/tree/development

答案 1 :(得分:0)