juliano.net
juliano.net

Reputation: 8177

Make AutoMapper's Map ignore some properties?

My model object has some properties for lazy loaded collections and AutoMapper is for these collections to be loaded even when I don't need them (this is causing thousands of query executions in my DB). Is it possible to make AutoMapper ignore some properties when I call Mapper.Map?

public TTarget Adapt<TSource, TTarget>(TSource source)
{
    return Mapper.Map<TTarget>(source);
}

Upvotes: 2

Views: 5411

Answers (3)

Prabu
Prabu

Reputation: 4197

With AutoMapper 8.0 the previous answer no longer works.

8.0 Upgrade Guide - ForSourceMember Ignore

So the adjusted answer would be:

Mapper.CreateMap<Person, Doctor>()
      .ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.LastName))
      .ForMember(dest => dest.Id, opt => opt.Ignore())
      .ForSourceMember(src=> src.FirstName, opt => opt.DoNotValidate());

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }    
}

public class Doctor
{
    public int Id { get; set; }
    public string Name { get; set;}
}

Here is how I ignore a property with Automapper (I've included how to ignore both in the source and destination object):

Mapper.CreateMap<Person, Doctor>()
      .ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.LastName))
      .ForMember(dest => dest.Id, opt => opt.Ignore())
      .ForSourceMember(src=> src.FirstName, opt => opt.Ignore());

Upvotes: 5

wonea
wonea

Reputation: 4969

With AutoMapper 8.0 @Prabu's answer no longer works.

8.0 Upgrade Guide - ForSourceMember Ignore

So the adjusted answer would be:

Mapper.CreateMap<Person, Doctor>()
      .ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.LastName))
      .ForMember(dest => dest.Id, opt => opt.Ignore())
      .ForSourceMember(src=> src.FirstName, opt => opt.DoNotValidate());

Upvotes: 2

LSU.Net
LSU.Net

Reputation: 849

Mapper.CreateMap<SourceClass, DestinationClass>()
                .ForMember(b=>b.SomeMember, c=>c.Ignore());

Upvotes: 2

Related Questions