5

我已经看到很多发生此错误的示例,原因多种多样,并且我已经经历了所有我能看到的原因,但我仍然收到错误,所以我想知道是否有人可以提供一些关于这个的信息错误实际上意味着,所以我可以尝试找出原因。这是一些代码:

控制器:

    [HttpPost]
    public ActionResult Edit(ProfileViewModel model)
    {
        if (ModelState.IsValid)
        {
            var person = new UserAttribute();

            person = Mapper.Map<ProfileViewModel, UserAttribute>(model);

            db.UserAttribute.Add(person);
            db.SaveChanges();

        }

查看模型

public class ProfileViewModel
{

    [Display(Name = "First Name")]
    [StringLength(20)]
    [Required]
    public string FirstName { get; set; }

    [Display(Name = "Last Name")]
    [StringLength(30)]
    [Required]
    public string LastName { get; set; }

    [Display(Name = "Gender")]
    [Required]
    public string Gender { get; set; }

    [Display(Name = "Date of Birth")]
    [DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}", ApplyFormatInEditMode = true)]
    public DateTime DOB { get; set; }

    [Display(Name = "Hair Color")]
    public string HairColor { get; set; }

    [Display(Name = "Eye Color")]
    public string EyeColor { get; set; }

    [Display(Name = "Body Type")]
    public string Weight { get; set; }

    [Display(Name = "Height")]
    public string HeightFeet { get; set; }

    public string HeightInches { get; set; }

    public int UserId { get; set; }

    public IEnumerable<SelectListItem> WeightList { get; set; }
    public IEnumerable<SelectListItem> EyeColorList { get; set; }
    public IEnumerable<SelectListItem> HairColorList { get; set; }
    public IEnumerable<SelectListItem> HeightFeetList { get; set; }
    public IEnumerable<SelectListItem> HeightInchesList { get; set; }
    public IEnumerable<SelectListItem> GenderList { get; set; }

}

用户属性模型:

    public int ProfileId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Gender { get; set; }
    public System.DateTime DOB { get; set; }
    public string HairColor { get; set; }
    public string EyeColor { get; set; }
    public string HeightFeet { get; set; }
    public string Weight { get; set; }
    public int UserId { get; set; }
    public string HeightInches { get; set; }

映射配置:

public class AutoMapperConfiguration
{
    public static void Configure()
    {
        Mapper.Initialize(x => x.AddProfile<ViewToDomainMapProfile>());
        Mapper.Initialize(x => x.AddProfile<DomainToViewMapProfile>());
    }
}

public class ViewToDomainMapProfile : Profile
{
    public override string ProfileName
    {
        get { return "ViewToDomainMapProfile"; }
    }

    protected override void Configure()
    {
        Mapper.CreateMap<ProfileViewModel, UserAttribute>()
            .ForSourceMember(x => x.GenderList, y => y.Ignore())
            .ForSourceMember(x => x.HairColorList, y => y.Ignore())
            .ForSourceMember(x => x.EyeColorList, y => y.Ignore())
            .ForSourceMember(x => x.WeightList, y => y.Ignore())
            .ForSourceMember(x => x.HeightFeetList, y => y.Ignore())
            .ForSourceMember(x => x.HeightInchesList, y => y.Ignore());
    }
}

并在全局 asax 中调用配置:

        AutoMapperConfiguration.Configure();
4

2 回答 2

13

使用Mapper.AssertConfigurationIsValid();会产生以下异常:

AutoMapper.AutoMapperConfigurationException : 
Unmapped members were found. Review the types and members below.
Add a custom mapping expression, ignore, add a custom resolver, or modify the source/destination type
==============================================================================================
ProfileViewModel -> UserAttribute (Destination member list)
----------------------------------------------------------------------------------------------
ProfileId

因此,您需要为ProfileId.

Mapper.AssertConfigurationIsValid();总的来说,在你的单元测试中使用(你有它们,对吗?),或者在你的映射器配置之后使用是一个很好的实践。它将显示此类错误配置的详细信息。

于 2013-06-10T12:41:14.560 回答
0

对于视图模型 => 用户属性

我注意到 ProfileId 是目标属性,但不是源属性。

public int ProfileId { get; set; }

您是否需要添加代码来导入此目标成员?

其他:我可能还建议使用或自定义自动映射器来映射仅按名称匹配的属性。

此外,如果可能,请避免模型名称以“属性”一词结尾,因为按照惯例,这几乎专门用于实际属性。(我很抱歉吹毛求疵)

于 2013-06-09T06:36:01.190 回答