如何避免在automapper中重复计算

Bas*_*sie 0 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) =>
    {

    });
Run Code Online (Sandbox Code Playgroud)

在哪里TotalLoanAdvanced()TotalinterestRepaymentToLoanEndDate()是扩展方法Loan.

但是,为了计算总利息,我的扩展方法当然要求TotalLoanAdvanced()乘以利率,这意味着我计算TotalLoanAdvanced的每笔贷款都要计算两次.

我怎么能避免这个?

我想这可能是可行的东西,如BeforeMapAfterMap,但是当我尝试

.AfterMap((dto, loan) =>
{
    dto.TotalLoanAdvanced = 5000000;
});
Run Code Online (Sandbox Code Playgroud)

我可以看到它dto被映射为具有TotalLoanAdvanced0的相同的事情BeforeMap.

.BeforeMap((loan, dto) =>
{
    dto.TotalLoanAdvanced = 5000000;
});
Run Code Online (Sandbox Code Playgroud)

我该怎么做?

huy*_*itw 6

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

不这样做的原因是:

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

  • 是的,请不要将业务逻辑放在映射中,请 (3认同)