我有两个实体和两个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