子関係を持つエンティティを更新または作成しています。たとえば、集約ルートは 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 があります。
マッピング内でこれをプラグインする場所が見つかりません。
助言がありますか?