Ho due entità e due DTO. Sto mappando le entità ai DTO. versioni semplificate dei DTOs assomigliano:Come utilizzare AfterMap per mappare le proprietà sulla proprietà della raccolta
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; }
}
I Foo
e Bar
classi sono:
public class Foo {
public ICollection<Bar> Bars { get; set; }
}
public class Bar {
// Unimportant properties
}
la mappatura
sto mappando questo in un metodo come:
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 ha già mappature configurate per Foo a FooDto e Bar a BarDto che funzionano bene.
Ho bisogno di aggiornare ogni BarDto in FooDto con un totale utilizzando un servizio (i motivi per cui sono troppo lunghi per entrare - è sufficiente dire che deve avvenire in questo modo).
Cosa sintassi ho bisogno per utilizzare in AfterMap
per mappare ogni Total
proprietà del BarDto
utilizzando il metodo _barTotalService.CalculateTotal(bar)
, dove bar
è la Bar
in questione?
Si noti che il metodo _barTotalService.CalculateTotal
prende un'istanza di Bar
non BarDto
.
'total' è una struttura di' BarDto'. 'FooDto.Bars' non può avere la proprietà. Inoltre, come viene passato 'bar' in' _barTotalService.CalculateTotal (bar) '? –
'FooDto' ha una collezione chiamata' Bars' di tipo 'BarDto'. A loro volta, ogni 'BarDto' ha una proprietà chiamata' Total'. Ho bisogno di impostare questa proprietà 'Total' usando le istanze di' Bar' contenute nell'oggetto 'Foo' originale che viene mappato. – Graham