我有兩個實體和兩個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到FooDto和Bar到BarDto的工作正常的映射。
我需要更新FooDto中的每個BarDto使用一個服務的總數(其原因太長,無法進入 - 足以說它需要以這種方式發生)。
什麼語法我需要在AfterMap
使用使用_barTotalService.CalculateTotal(bar)
方法BarDto
每個Total
屬性映射,其中bar
是有問題的Bar
?
請注意,_barTotalService.CalculateTotal
方法需要Bar
的實例而不是BarDto
。
'Total'是BarDto'的'屬性。 'FooDto.Bars'不能擁有這個屬性。在'_barTotalService.CalculateTotal(bar)'中如何傳遞'bar'? –
'FooDto'有一個叫'BarDto'類型的'Bars'集合。反過來,每個BarDto都有一個名爲'Total'的屬性。我需要使用映射的原始'Foo'對象中包含的'Bar'實例來設置此'Total'屬性。 – Graham