Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

AutoMapper's Ignore() not working when using ForSourceMember?

I'm trying to ignore a property from source type. I have defined mapping like this:

var map = AutoMapper.Mapper.CreateMap<Article, IArticle>();
map.ForSourceMember(s => s.DateCreated, opt => opt.Ignore());
map.ForSourceMember(s => s.DateUpdated, opt => opt.Ignore());

When I call Map function,

AutoMapper.Mapper.Map(article, articlePoco);

destination's properties gets updated anyway. I'm using the latest stable version downloaded from NuGet.

Any ideas why this isn't working ?

I have found similar question to this one but there is no answer attached. [question]:AutoMapper's Ignore() not working?

like image 615
khorvat Avatar asked Nov 28 '13 13:11

khorvat


2 Answers

Change the mapping to use ForMember:

map.ForMember(s => s.DateCreated, opt => opt.Ignore());
map.ForMember(s => s.DateUpdated, opt => opt.Ignore());
like image 158
Gruff Bunny Avatar answered Nov 17 '22 09:11

Gruff Bunny


If the property that you want to ignore only exists in the source object then you can you MemberList.Source in combination with the option method DoNotValidate(). See below:

CreateMap<IArticle, Article>(MemberList.Source)
    map.ForSourceMember(src => src.DateCreated, opt=> opt.DoNotValidate());
    map.ForSourceMember(src => src.DateUpdated, opt => opt.DoNotValidate());

This is perfect if you are using AssertConfigurationIsValid and want to ignore validation of certain source properties.

like image 22
andre Avatar answered Nov 17 '22 09:11

andre