在 aspnet core 和 ef core 中使用 automapper.collection 不会更新集合中编辑的记录



我使用的是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。地图(odto,o(;在dto和实体之间进行映射,但我发现订单中的orderitems集合中有新的orderitem保存良好,但对现有条目的任何编辑似乎都不会更新到数据库。

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

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

这是更新方法:

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));
}

当尝试更新订单项记录时,input和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自动处理集合编辑是否缺少什么?

您尝试过实体框架核心回购吗?

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

我使用此处列出的扩展来解决问题:https://entityframeworkcore.com/knowledge-base/39452054/asp-net-core-with-ef-core---dto-collection-mapping

最新更新