Automapper: map properties manually

I just started using automapper to display DTOs ↔ Entities and it seems to work fine.

In some special cases, I want to display only some properties and perform additional checks. Without automapper, the code looks like this (using quickflect PropertyExtensions):

object target;
object source;
string[] changedPropertyNames = { };

foreach (var changedPropertyName in changedPropertyNames)
{
    var newValue = source.GetPropertyValue(changedPropertyName);
    target.SetPropertyValue(changedPropertyName, newValue);
}

Of course, this code will not work if type conversion is required. Automapper uses the built-in TypeConverters, and I also created some specific implementations of TypeConverter.

Now I wonder if it is possible to display individual properties and use an implementation of the automapper type conversion, something like this

Mapper.Map(source, target, changedPropertyName);

Update

I think I need more information:

I have already created some maps, for example.

Mapper.CreateMap<CalendarEvent, CalendarEventForm>()

typeconverter nullable dateTime CalendarEvent, .

Mapper.CreateMap<DateTimeOffset?, DateTime?>().ConvertUsing<NullableDateTimeOffsetConverter>();

-api OData Controller. EntityDTOs

Mapper.Map(entityDto, entity);

.

PATCH, a Delta<TDto> entityDto . entityDto.GetChangedPropertyNames() .

, , , a DateTimeOffset? NullableDateTimeOffsetConverter.

+4
3

select, ,

// Create a map
var map = CreateMap<Source,Target>();
// ingnore all existing binding of property
map.ForAllMembers(opt => opt.Ignore());
// than map property as following
map.ForMember(dest => dest.prop1, opt => opt.MapFrom( src => src.prop1));
map.ForMember(dest => dest.prop2, opt => opt.MapFrom( src => src.prop2));
+13

, MapFrom - https://github.com/AutoMapper/AutoMapper/wiki/Projection

Mapper.Map(source, target)
   .ForMember(m => m.Property, opt => opt.MapFrom(src => src.ChangedProperty));

( AutoMapper):

// Model
var calendarEvent = new CalendarEvent
    {
        Date = new DateTime(2008, 12, 15, 20, 30, 0),
        Title = "Company Holiday Party"
    };

// Configure AutoMapper
Mapper.CreateMap<CalendarEvent, CalendarEventForm>()
    .ForMember(dest => dest.EventDate, opt => opt.MapFrom(src => src.Date.Date))
    .ForMember(dest => dest.EventHour, opt => opt.MapFrom(src => src.Date.Hour))
    .ForMember(dest => dest.EventMinute, opt => opt.MapFrom(src => src.Date.Minute));
+5

, , (target) .

, string bool Status "A" "I" (/), - :

.ForMember(dest => dest.Status, opt => opt.MapFrom(src => src.Status == "A"))

, , :

.ForMember(dest => dest.Status, opt => opt.MapFrom(src => src.Status ? "A" : "I"))

:

.ForMember(dest => dest.SomeDate, opt => opt.MapFrom(src => src.SomeDate.ToString("M/d/yyyy")));
+1

All Articles