2013-06-09 6 views
5

Ich habe viele Beispiele für diesen Fehler aufgetreten, für eine Vielzahl von Ursachen und ich habe alle Ursachen, die ich sehen kann, aber immer noch ich habe Der Fehler, also frage ich mich, ob jemand eine Information darüber geben kann, was dieser Fehler eigentlich bedeutet, also kann ich versuchen, die Ursache zu finden. Hier ist ein Code:Wie Debug AutoMapper "Fehlende Typ Map-Konfiguration oder nicht unterstützte Zuordnung" Fehler

Controller:

[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(); 

     } 

Ansicht Modell

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 Modell:

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

Mapping config:

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

und die Config in der globalen asax genannt:

 AutoMapperConfiguration.Configure(); 
+0

ist dies ein Kompilierungs- oder Laufzeitfehler? funktioniert auch die Domäne, um View Model Mapping ordnungsgemäß zu funktionieren? – user1778606

Antwort

0

Für das Viewmodel => userattribute

bemerkte mich, dass Profileid ein Ziel Eigenschaft ist, aber keine Quelle Eigenschaft.

public int ProfileId { get; set; } 

Müssen Sie Code hinzufügen, um dieses Zielmitglied zu ingore?

Andere: Ich könnte auch empfehlen, den Auto-Mapper zu verwenden oder anzupassen, um Eigenschaften, die diese Übereinstimmung ausschließlich nach Namen präsentieren, anzupassen.

Auch wenn möglich, vermeiden Sie bitte Modellnamen, die mit dem Wort Attritribute enden, da dies per Konvention fast ausschließlich für tatsächliche Attribute verwendet wird. (Meine Entschuldigung für Erbsenzählerei)

10

Mit Mapper.AssertConfigurationIsValid(); erzeugt die folgende Ausnahme:

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 

Also, Sie müssen für ProfileId Mapping hinzuzufügen.

Insgesamt ist es eine gute Praxis, Mapper.AssertConfigurationIsValid(); entweder in Ihren Komponententests zu verwenden (Sie haben sie, oder?), Oder nach Ihrer Mapper-Konfiguration. Es werden detaillierte Informationen für solche Fehlkonfigurationen angezeigt.

+0

Das hat mich gerettet. Einfach hinzufügen Mapper.AssertConfigurationIsValid(); in meinen global.asax-Zuordnungen lassen Sie mich sehen, dass meine Zuordnung eine andere Klasse mit dem gleichen Namen verwendet. (ignoriere, dass das keine großartige Übung ist, es ist Legacy-Code) Ich habe nicht bemerkt, dass die Mapper.Map() keinen Fehler werfen würde, wenn sie keine Mappings für alle Mitglieder finden könnte. Es schlägt nur fehl, wenn es versucht zu mappen. –

+0

jemand sollte diese Antwort akzeptieren –

Verwandte Themen