0

I am trying to map a view model I made with another model using AutoMapper.

Here is the mapping code:

Mapper.Initialize(config =>
        {

            #region Admin

            //Labels
            config.CreateMap<AddLabelViewModel, Label>();
            config.CreateMap<Label, AddLabelViewModel>();
            config.CreateMap<EditLabelViewModel, Label>();
            config.CreateMap<Label, EditLabelViewModel>();

            //Legislatures
            config.CreateMap<AddLegislatureViewModel, Legislature>();
            config.CreateMap<Legislature, AddLegislatureViewModel>();
            config.CreateMap<EditLegislatureViewModel, Legislature>();
            config.CreateMap<Legislature, EditLegislatureViewModel>();

            //Proposers
            config.CreateMap<AddProposerViewModel, Proposer>();
            config.CreateMap<Proposer, AddProposerViewModel>();
            config.CreateMap<EditProposerViewModel, Proposer>();
            config.CreateMap<Proposer, EditProposerViewModel>();

            //Committees
            config.CreateMap<AddCommitteeViewModel, Committee>();
            config.CreateMap<Committee, AddCommitteeViewModel>();
            config.CreateMap<EditCommitteeViewModel, Committee>();
            config.CreateMap<Committee, EditCommitteeViewModel>();

            //DraftLaws
            config.CreateMap<AddDraftLawViewModel, DraftLaw>();
            config.CreateMap<DraftLaw, AddDraftLawViewModel>();
            config.CreateMap<EditDraftLawViewModel, DraftLaw>();
            config.CreateMap<DraftLaw, EditDraftLawViewModel>();

            //DraftLawPhase
            config.CreateMap<AddDraftLawPhaseViewModel, DraftLawPhase>();
            config.CreateMap<DraftLawPhase, AddDraftLawPhaseViewModel>();
            config.CreateMap<EditDraftLawPhaseViewModel, DraftLawPhase>();
            config.CreateMap<DraftLawPhase, EditDraftLawPhaseViewModel>();
            
            //DocumentGroup
            config.CreateMap<AddDocumentGroupViewModel, DocumentGroup>();
            config.CreateMap<DocumentGroup, AddDocumentGroupViewModel>();
            config.CreateMap<EditDocumentGroupViewModel, DocumentGroup>();
            config.CreateMap<DocumentGroup, EditDocumentGroupViewModel>();

            //DocumentCommittee
            config.CreateMap<AddDocumentCommitteeViewModel, DocumentCommittee>();
            config.CreateMap<DocumentCommittee, AddDocumentCommitteeViewModel>();
            config.CreateMap<EditDocumentCommitteeViewModel, DocumentCommittee>();
            config.CreateMap<DocumentCommittee, EditDocumentCommitteeViewModel>();

            //Users
            config.CreateMap<AddUserViewModel, User>();
            config.CreateMap<User, AddUserViewModel>();
            config.CreateMap<EditUserViewModel, User>();
            config.CreateMap<User, EditUserViewModel>();

            #endregion

            #region Deputies

            // Deputy to DeputyViewItem
            config.CreateMap<Deputy, DeputyViewItem>()              
            .ForMember(dest => dest.Id, opt => opt.MapFrom(src => src.ID))
            .ForMember(dest => dest.FirstName, opt => opt.MapFrom(src => src.FirstName))
            .ForMember(dest => dest.LastName, opt => opt.MapFrom(src => src.LastName))
            .ForMember(dest => dest.Photo, opt => opt.MapFrom(src => src.Photo))
            .ForMember(dest => dest.SocialFacebook, opt => opt.MapFrom(src => src.SocialFacebook))
            .ForMember(dest => dest.SocialTwitter, opt => opt.MapFrom(src => src.SocialTwitter))
            .ForMember(dest => dest.SocialLinkedin, opt => opt.MapFrom(src => src.SocialLinkedin))
            .ForMember(dest => dest.PoliticalGroup, opt => opt.MapFrom(src => src.PoliticalGroup.Acronym))
            //.ForMember(dest => dest.Party, opt => opt.MapFrom(src => "PTK"))
            ;

            config.CreateMap<Deputy, ProfileViewModel>()
            .ForMember(dest => dest.Biography, opt => opt.MapFrom(src => src.Biography))
            .ForMember(dest => dest.Party, opt => opt.MapFrom(src => src.Party.Acronym))
            .ForMember(dest => dest.PoliticalGroup, opt => opt.MapFrom(src => src.PoliticalGroup.Acronym))
            .ForMember(dest => dest.Photo, opt => opt.MapFrom(src => src.Photo))
            ;

            config.CreateMap<CommitteeMember, CommitteeViewItem>()
            .ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.Committee.Name.Text))
            ;

            config.CreateMap<WealthDeclaration, WealthViewItem>()
            .ForMember(dest => dest.Year, opt => opt.MapFrom(src => src.Year))
            .ForMember(dest => dest.Link, opt => opt.MapFrom(src => src.Link))
            ;

            config.CreateMap<Deputy, ConnectViewModel>()
            .ForMember(dest => dest.SocialFacebook, opt => opt.MapFrom(src => src.SocialFacebook))
            .ForMember(dest => dest.SocialTwitter, opt => opt.MapFrom(src => src.SocialTwitter))
            .ForMember(dest => dest.SocialLinkedin, opt => opt.MapFrom(src => src.SocialLinkedin))
            .ForMember(dest => dest.DeputyId, opt => opt.MapFrom(src => src.ID))
            ;

            config.CreateMap<Answer, QuestionAnswerViewItem>()
            .ForMember(dest => dest.QuestionText, opt => opt.MapFrom(src => src.Question.Text.Text))
            .ForMember(dest => dest.QuestionName, opt => opt.MapFrom(src => src.Question.FullName))
            .ForMember(dest => dest.QuestionEmail, opt => opt.MapFrom(src => src.Question.Email))
            .ForMember(dest => dest.QuestionTel, opt => opt.MapFrom(src => src.Question.Tel))
            .ForMember(dest => dest.QuestionMunicipality, opt => opt.MapFrom(src => src.Question.Municipality.Label.Text))
            .ForMember(dest => dest.QuestionCreatedAt, opt => opt.MapFrom(src => src.Question.CreatedAt))
            .ForMember(dest => dest.DeputyId, opt => opt.MapFrom(src => src.Question.Deputy.ID))

            .ForMember(dest => dest.AnswerId, opt => opt.MapFrom(src => src.ID))
            .ForMember(dest => dest.AnswerText, opt => opt.MapFrom(src => src.Text.Text))
            .ForMember(dest => dest.AnswerCreatedAt, opt => opt.MapFrom(src => src.CreatedAt))
            ;

            config.CreateMap<ActivityPhoto, ActivityViewItem>()
            .ForMember(dest => dest.Title, opt => opt.MapFrom(src => src.Activity.Title.Text))
            .ForMember(dest => dest.Date, opt => opt.MapFrom(src => src.Activity.Date))
            .ForMember(dest => dest.Photo, opt => opt.MapFrom(src => src.Photo))
            ;

            config.CreateMap<Speech, SpeechViewItem>()
           .ForMember(dest => dest.Title, opt => opt.MapFrom(src => src.Title.Text))
           .ForMember(dest => dest.Date, opt => opt.MapFrom(src => src.Date))
           .ForMember(dest => dest.FilePath, opt => opt.MapFrom(src => src.FileDocument.FilePath))
           .ForMember(dest => dest.DeputyId, opt => opt.MapFrom(src => src.Deputy.ID))
           ;

            config.CreateMap<Initiative, InitiativesViewItem>()
            .ForMember(dest => dest.DeputyId, opt => opt.MapFrom(src => src.Deputy.ID))
            .ForMember(dest => dest.Title, opt => opt.MapFrom(src => src.Title.Text))
            .ForMember(dest => dest.Date, opt => opt.MapFrom(src => src.Date))
            .ForMember(dest => dest.FilePath, opt => opt.MapFrom(src => src.File.FilePath))
            ;

            config.CreateMap<DeputyVote, VotingActivityViewItem>()
            .ForMember(dest => dest.DeputyId, opt => opt.MapFrom(src => src.Deputy.ID))
            .ForMember(dest => dest.Title, opt => opt.MapFrom(src => src.VotingActivity.Title.Text))
            .ForMember(dest => dest.Date, opt => opt.MapFrom(src => src.Date))
            .ForMember(dest => dest.FilePath, opt => opt.MapFrom(src => src.VotingActivity.File.FilePath))
            .ForMember(dest => dest.Vote, opt => opt.MapFrom(src => src.Vote))
            ;

            config.CreateMap<Municipality, MunicipalityViewItem>()
            .ForMember(dest => dest.MunicipalityId, opt => opt.MapFrom(src => src.ID))
            .ForMember(dest => dest.Municipality, opt => opt.MapFrom(src => src.Label.Text))
            ;

            config.CreateMap<Question, AskQuestionViewModel>()
            .ForMember(dest => dest.Question, opt => opt.MapFrom(src => src.Text.Text))
            .ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.FullName))
            .ForMember(dest => dest.Eamil, opt => opt.MapFrom(src => src.Email))
            .ForMember(dest => dest.PhoneNumber, opt => opt.MapFrom(src => src.Tel))
            .ForMember(dest => dest.MunicipalityId, opt => opt.MapFrom(src => src.Municipality.ID))
            ;

            config.CreateMap<AskQuestionViewModel, Question>()
           .ForMember(dest => dest.Deputy.ID, opt => opt.MapFrom(src => src.DeputyId))
           .ForMember(dest => dest.Text.Text, opt => opt.MapFrom(src => src.Question))
           .ForMember(dest => dest.FullName, opt => opt.MapFrom(src => src.Name))
           .ForMember(dest => dest.Email, opt => opt.MapFrom(src => src.Eamil))
           .ForMember(dest => dest.Tel, opt => opt.MapFrom(src => src.PhoneNumber))
           .ForMember(dest => dest.Municipality.ID, opt => opt.MapFrom(src => src.MunicipalityId))
           ;

            #endregion

        });

And here is the error message:

System.ArgumentException: Expression 'dest => dest.Deputy.ID' must resolve to top-level member and not any child object's properties. Use a custom resolver on the child type or the AfterMap option instead. Parameter name: lambdaExpression

1

1 Answer 1

1

You need to create a mapping between AskQuestionModel and Deputy

config.CreateMap<AskQuestionModel, Deputy>()
.ForMember(x => x.Id, opt => opt.MapFrom(src=> src.DeputyId));

Update: Sorry, I forgot to add a mapping for Deputy model itself: .ForMember(dest => dest.Deputy, opt => opt.MapFrom(src => src))

Also, you have the same problem with Municipality and Text entities.

So your full mapping will be like:

config.CreateMap<AskQuestionViewModel, Question>()
       .ForMember(dest => dest.Deputy, opt => opt.MapFrom(src => src))
       .ForMember(dest => dest.Text, opt => opt.MapFrom(src => src))
       .ForMember(dest => dest.FullName, opt => opt.MapFrom(src => src.Name))
       .ForMember(dest => dest.Email, opt => opt.MapFrom(src => src.Eamil))
       .ForMember(dest => dest.Tel, opt => opt.MapFrom(src => src.PhoneNumber))
       .ForMember(dest => dest.Municipality, opt => opt.MapFrom(src => src))
       ;

config.CreateMap<AskQuestionViewModel, Deputy>()
       .ForMember(dest => dest.ID, opt => opt.MapFrom(src => src.DeputyId));
config.CreateMap<AskQuestionViewModel, Municipality>()
       .ForMember(dest => dest.ID, opt => opt.MapFrom(src => src.MunicipalityId));
config.CreateMap<AskQuestionViewModel, Text>()
       .ForMember(dest => dest.Text, opt => opt.MapFrom(src => src.Question));

Now it should work.

Sign up to request clarification or add additional context in comments.

7 Comments

@endrit-sheholli, what do you have now? Same error?
@endrit-sheholli, can you update your question with the new code you created, please?
the error is not resolved. the same error is coming up again.
@endrit-sheholli, hm, can you, please, add whole mapping class? What is config? And what version of Automapper do you use?
I'm afraid this is not related to the scope of the current question. There can be many reasons why the data is not populated. You could ask a new question and explain everything in details and add your classes as well.
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.