使用AutoMapper将父类Dto映射到子类ViewModel

时间:2019-01-19 21:24:46

标签: c# asp.net-web-api automapper viewmodel dto

我有一个收据和类别类。收据是父母,类别是孩子。在将父级映射到子类时遇到问题,即使我在viewmodel中设置了值,我也从子类dto中获得了空值。

下面是我尝试过的代码。

这是DTO:

public class ReceiptDto
{
    public int ReceiptId { get; set; }
    public int CategoryId { get; set; }
}

public class CategoryDto
{
    public int CategoryId { get; set; }
}

这是我的ViewModel:

public class ReceiptViewModel
{
    public int ReceiptId { get; set; }
    public CategoryViewModel CategoryVM { get; set; }
}

public class CategoryViewModel
{
    public int CategoryId { get; set; }
}

这是我使用AutoMapper映射的方式:

CreateMap<ReceiptDto, CategoryViewModel>(MemberList.None)
    .ReverseMap()
    .ForAllMembers(opts => opts.Condition((src, dest, srcMember) => srcMember != null));

CreateMap<ReceiptDto, ReceiptViewModel>(MemberList.None)
    .ForMember(dest => dest.CategoryVM, opt => opt.MapFrom(src => Mapper.Map<ReceiptDto, CategoryViewModel>(src)))
    .ReverseMap()
    .ForAllMembers(opts => opts.Condition((src, dest, srcMember) => srcMember != null));

CreateMap<CategoryDto, CategoryViewModel>(MemberList.None)
    .ReverseMap()
    .ForAllMembers(opts => opts.Condition((src, dest, srcMember) => srcMember != null));

这是我在Controller中使用它的方式:

public async Task<IHttpActionResult> CreateReceipt(ReceiptViewModel receiptVM)
    {
        ReceiptDto receiptDto = Mapper.Map<ReceiptDto>(receiptVM);
    }

但是我的数据库中的CategoryId为null。因此,我一直认为问题出在映射上,但是我不确定是哪一部分导致了问题。谢谢。

0 个答案:

没有答案