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; }

}

UserAttribute モデル:

    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 に答える