如何避免在automapper中重复计算

问题描述 投票:0回答:1

我在我的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;
});

我该怎么做?

c# automapper
1个回答
5
投票

我对如何修复AutoMapper配置没有答案。但是,您的问题是如何避免这种情况?我应该如何做到这一点,所以我想回答一些建议:不要在映射器配置中放置业务逻辑。

不这样做的原因是:

  • 映射对象应尽可能简单,按惯例映射属性
  • 不要在mapper配置中添加这样的魔法,因为它会使代码更难理解/遵循
  • 你会避免像现在这样的时髦行为
  • 您的代码更难测试
© www.soinside.com 2019 - 2024. All rights reserved.