Использование automapper.collection в ядре aspnet и ef core не обновляет отредактированные записи в коллекции.
Я использую Asnet Boilerplaite Aspnet Core и EF Core. Я инициализировал automapper.collection в PreInitialize следующим образом:
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 и сущностью, но я обнаружил, что новые элементы порядка в коллекции элементов порядка в пределах заказов сохраняются, но любые изменения в существующих записях, по-видимому, не обновляются в базе данных.
Сущность заказа и коллекция загружаются из хранилища с использованием следующего:
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 следующие при попытке обновления записи orderitem:
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 автоматически обрабатывал изменения в коллекции?
1 ответ
Вы пробовали репозиторий Entity Framework Core?
https://github.com/AutoMapper/AutoMapper.Collection.EFCore/tree/development
Я использовал указанное здесь расширение для решения проблемы:https://entityframeworkcore.com/knowledge-base/39452054/asp-net-core-with-ef-core---dto-collection-mapping