3

子関係を持つエンティティを更新または作成しています。たとえば、集約ルートは Product (ProductId、Title) で、0 個以上の ProductSuppliers (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 があります。

マッピング内でこれをプラグインする場所が見つかりません。

助言がありますか?

4

1 に答える 1

4

前に戻りたい場合に備えて、UseDestinationValue() オプションは、AutoMapper に宛先プロパティ値を置き換えないように指示する方法です。

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

于 2009-10-16T13:00:29.320 に答える