我正在使用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,但这似乎不起作用。任何帮助将不胜感激。