私は2つのエンティティと2つのDTOを持っています。私はエンティティをDTOにマッピングしています。 DTOの簡体字版は見てのように:AfterMapを使用してコレクションプロパティのプロパティをマップする方法
public class FooDto {
// Other properties removed for clarity.
public string Description { get; set; }
public decimal Total { get; set; }
public ICollection<BarDto> Bars { get; set; }
}
public class BarDto {
// Other properties removed for clarity.
public decimal Total { get; set; }
}
Foo
とBar
クラスは次のとおりです。
public class Foo {
public ICollection<Bar> Bars { get; set; }
}
public class Bar {
// Unimportant properties
}
マッピング
私はような方法でこれをマッピングしています:
public FooDto Map(IMapper mapper, Foo foo) {
// _fooTotalService and _barTotalService injected elsewhere by DI.
return mapper.Map<Foo, FooDto>(foo, opt =>
{
opt.AfterMap((src, dest) =>
{
dest.Total = _fooTotalService.GetTotal(src);
dest.Bars.Total = ?????? // Needs to use _barTotalService.CalculateTotal(bar)
});
});
}
AutoMapperには既にFoo to FooDtoとBar to BarDtoのマッピングが正しく設定されています。
FooDtoの各BarDtoをサービスを使用して合計して更新する必要があります(その理由は、長すぎるため、このようにする必要があります)。
何構文私はbar
が問題のBar
ある_barTotalService.CalculateTotal(bar)
方法を、使用してBarDto
の各Total
プロパティをマッピングするためにAfterMap
で使用する必要がありますか?
_barTotalService.CalculateTotal
メソッドは、ではないBar
のインスタンスを取ることに注意してください。
を 'Total'は' BarDto'の財産です。 'FooDto.Bars'はそのプロパティを持つことができません。また、 'bar'は' _barTotalService.CalculateTotal(bar) 'でどのように渡されますか? –
'FooDto'は' BarDto'型の 'Bars'というコレクションを持っています。次に、それぞれの「BarDto」は「合計」というプロパティを有する。マップされている元の 'Foo'オブジェクトに含まれている' Bar'のインスタンスを使ってこの 'Total'プロパティを設定する必要があります。 – Graham