Mapping 自动映射-嵌套实体

Mapping 自动映射-嵌套实体,mapping,automapper,Mapping,Automapper,我正在更新或创建一个具有子关系的实体,比如聚合根是Product(ProductId,Title),它有零个或多个ProductSupplierId(ProductSupplierId,SuppliedAtPrice,SupplierInfoId),DTO表示类似的结构(所有信息)。很简单 我已经为ProductDTO和ProductSupplierDTO创建了一个简单的映射,我想它的工作原理与为新实体准备的一样 但是,在处理DTO时,我可能正在更新现有实体,因此我会执行以下操作: Produc

我正在更新或创建一个具有子关系的实体,比如聚合根是Product(ProductId,Title),它有零个或多个ProductSupplierId(ProductSupplierId,SuppliedAtPrice,SupplierInfoId),DTO表示类似的结构(所有信息)。很简单

我已经为ProductDTO和ProductSupplierDTO创建了一个简单的映射,我想它的工作原理与为新实体准备的一样

但是,在处理DTO时,我可能正在更新现有实体,因此我会执行以下操作:

Product product = productService.GetViaProductId(productDTO.ProductId) ?? new Product();
productDTOMapper.Map(productDTO, product);
productService.Update(product);
对于产品上存在的基元类型,它很好,因为任何ORM都可以识别值是否脏。然而,我不希望Automapper仅仅用新的集合替换Product.Suppliers,我想在某个地方插入一些逻辑来迭代Product.Suppliers,并检查是否已经存在一个实体,并更新它,或者创建一个新的实体,ProductSupplier不是一个值对象,它有一个Id,ProductSupplierId

我找不到在映射中插入此项的位置


有什么建议吗

如果您想返回,UseDestinationValue()选项是告诉AutoMapper不要替换目标属性值的方式


.ForMember(dto=>dto.SomeCollection,opt=>opt.UseDestinationValue())

要关闭,我已经不再使用AutoMapper来处理VM-->域,因为它不合适或不推荐。事实上,一开始没有那么多工作要做,所以我将使用一些属性映射,我也不会走反射路线。