我正在更新或创建具有子关系的实体,比如聚合根是Product(ProductId,Title),其具有零个或多个ProductSuppliers(ProductSupplierId,SuppliedAtPrice,SupplierInfoId),并且DTO表示类似的结构(所有信息)。很简单。
我已经为ProductDTO和ProductSupplierDTO创建了一个简单的地图,我认为它可以用于新实体。
然而,当处理DTO时,我可能正在更新现有实体,所以我做了类似这样的事情:
Product product = productService.GetViaProductId(productDTO.ProductId) ?? new Product();
productDTOMapper.Map(productDTO, product);
productService.Update(product);
对于Product上存在的原始类型,任何ORM都可以识别值是否为脏。但是我不希望Automapper只用新的集合替换Product.Suppliers,我想在某个地方插入一些逻辑来迭代product.Suppliers并检查实体是否已经存在并更新它,或者创建一个新的ProductSupplier它不是一个值对象,它有一个Id,ProductSupplierId。
我无法在映射中找到插入的位置。
有什么建议吗?
答案 0 :(得分:4)
如果您想要返回,请使用UseDestinationValue()选项告诉AutoMapper不要替换目标属性值。
.ForMember(dto => dto.SomeCollection,opt => opt.UseDestinationValue())