Ich habe zwei Entitäten und zwei DTOs. Ich ordne die Entitäten den DTOs zu. Vereinfachte Versionen der DTOs wie folgt aussehen:So verwenden Sie AfterMap, um Eigenschaften für die Auflistungseigenschaft zuzuordnen
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; }
}
Die Foo
und Bar
Klassen sind:
public class Foo {
public ICollection<Bar> Bars { get; set; }
}
public class Bar {
// Unimportant properties
}
Das Mapping
ich dies Abbildung in einem Verfahren, wie:
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 hat bereits Zuordnungen konfiguriert für Foo zu FooDto und Bar zu BarDto, die gut funktionieren.
Ich muss jedes BarDto in FooDto mit einem Gesamtwert über einen Dienst aktualisieren (die Gründe dafür sind zu lang, um zu gehen - es genügt zu sagen, dass es so geschehen muss).
Welche Syntax kann ich in AfterMap
verwenden muß jede Total
Eigenschaft BarDto
mit der _barTotalService.CalculateTotal(bar)
Methode zur Karte, wo bar
die Bar
in Frage?
Beachten Sie, dass die _barTotalService.CalculateTotal
-Methode eine Instanz Bar
nicht BarDto
übernimmt.
'Total' ist eine Eigenschaft von' BarDto'. 'FooDto.Bars' kann die Eigenschaft nicht haben. Wie wird 'bar' in' _barTotalService.CalculateTotal (bar) 'übergeben? –
'FooDto' hat eine Sammlung namens' Bars' vom Typ 'BarDto'. Jede "BarDto" hat wiederum eine Eigenschaft namens "Total". Ich muss diese "Total" -Eigenschaft mithilfe der Instanzen von "Bar" festlegen, die auf dem ursprünglichen "Foo" -Objekt enthalten sind, das zugeordnet wird. – Graham