3

我正在更新或创建具有子关系的实体,例如聚合根是 Product (ProductId, Title),它有零个或多个 ProductSuppliers (ProductSupplierId, SuppiedAtPrice, 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。

我找不到在映射中将其插入的位置。

有什么建议么?

4

1 回答 1

4

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

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

于 2009-10-16T13:00:29.320 回答