Automapper - 嵌套实体

时间:2009-10-15 10:00:05

标签: mapping automapper

我正在更新或创建具有子关系的实体,比如聚合根是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。

我无法在映射中找到插入的位置。

有什么建议吗?

1 个答案:

答案 0 :(得分:4)

如果您想要返回,请使用UseDestinationValue()选项告诉AutoMapper不要替换目标属性值。

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