如何避免在自动映射器中进行重复计算

时间:2019-02-21 18:01:56

标签: c# automapper

我的LoanProfile中有这个:

CreateMap<Loan, LoanDto>()
    .ForMember(
        dto => dto.TotalLoanAdvanced,
        loan => loan.MapFrom(l => l.TotalLoanAdvanced()))
    .ForMember(
        dto => dto.TotalInterestToLoanEndDate,
        loan => loan.MapFrom(l => l.InterestRepaymentAtLoanEndDate()))
    .ReverseMap()
    .AfterMap((dto, loan) =>
    {

    });

TotalLoanAdvanced()TotalinterestRepaymentToLoanEndDate()Loan上的扩展方法。

但是,要计算总利息,我的扩展方法当然是调用TotalLoanAdvanced()乘以利率,这意味着我为要映射的每笔贷款计算TotalLoanAdvanced两次。

如何避免这种情况?

我认为它可以与BeforeMapAfterMap之类的东西一起使用,但是当我尝试

.AfterMap((dto, loan) =>
{
    dto.TotalLoanAdvanced = 5000000;
});

我可以看到dto被映射为TotalLoanAdvanced为0。使用BeforeMap进行相同的操作:

.BeforeMap((loan, dto) =>
{
    dto.TotalLoanAdvanced = 5000000;
});

我应该怎么做?

1 个答案:

答案 0 :(得分:5)

关于如何修复AutoMapper配置,我没有任何答案。但是,您的问题是如何避免这种情况?我应该怎么做,因此我想提出一些建议:不要在映射器中放入业务逻辑组态。

不这样做的原因是:

  • 映射对象应尽可能简单,按惯例映射属性
  • 请勿在映射器配置中添加此类魔术,因为它会使代码更难以理解/关注
  • 您将避免像现在这样的时髦行为
  • 您的代码更难测试