尝试按键和键映射特定字典项时自动调试异常不存在

时间:2018-01-12 17:08:40

标签: c# dictionary asp.net-core automapper

我正在使用ASP.NET Core,我正在使用Automapper在我的模型和viewmodel之间进行映射。在我的模型中,我有一个对象字典。在我的映射函数中,我只是根据特定的键将字典中的一个对象映射到wiewmodel中的对象。如果列表中至少有一个模型存在密钥,但如果列表中的任何模型对象的密钥不存在,则映射失败,我没有问题。

这是我的模特:

namespace SylectusTL.Models.User
{
    public class User
    {
        public uint user_id { get; set; }       
        public string user_name { get; set; }
        public uint active { get; set; }
        public string first_name { get; set; }
        public string last_name { get; set; }
        public Dictionary<uint, Address.PhoneNumber> phone_numbers { get; set; }
    }
}

这是我的viewmodel:

namespace SylectusTL.ViewModels.Account
{
    public class UserViewModel
    {
        [Display(Name = "User ID")]
        public uint user_id { get; set; }
        [Display(Name = "User Name")]
        public string user_name { get; set; }
        [Display(Name = "Status")]
        public bool active { get; set; }
        [Display(Name = "First Name")]
        public string first_name { get; set; }
        [Display(Name = "Last Name")]
        public string last_name { get; set; }
        public PhoneNumber office_phone { get; set; }
        public PhoneNumber fax { get; set; }
        public PhoneNumber home_phone { get; set; }
        public PhoneNumber cell_phone { get; set; }
    }
}

这是我的映射配置:

public class MappingProfile : Profile
{
    public MappingProfile()
    {
        CreateMap<Models.User.User, ViewModels.Account.UserViewModel>()
            .ForMember(dest => dest.active, opts => opts.MapFrom(src => Convert.ToBoolean(src.active)))
            .ForMember(dest => dest.office_phone, opts => opts.MapFrom(src => (src.phone_numbers.Where(p => p.Key == 1).First().Value)))
            .ForMember(dest => dest.fax, opts => opts.MapFrom(src => (src.phone_numbers.Where(p => p.Key == 3).First().Value)))
            .ForMember(dest => dest.home_phone, opts => opts.MapFrom(src => (src.phone_numbers.Where(p => p.Key == 2).First().Value)))
            .ForMember(dest => dest.cell_phone, opts => opts.MapFrom(src => (src.phone_numbers.Where(p => p.Key == 4).First().Value)));
    }
}

所以正在发生的事情是我的特定查询没有传真类型号的用户,因此字典中没有键3。当我尝试映射时,这会导致异常。如果列表中至少有一个用户具有要查找密钥的字典,则不会发生此异常。例如。只有一个用户有一个单元格(键4),因此映射不会失败。

如果没有密钥3,有没有办法忽略这个属性?我试过NullSubstitute,但这似乎不起作用。任何帮助将不胜感激。

0 个答案:

没有答案