Automapper .ForMember () синтаксис - PullRequest
0 голосов
/ 18 апреля 2011

Можете ли вы показать мне правильный способ отображения, если у меня есть два одинаковых класса с разницей в одном свойстве.

// DatabaseCamper.Gender is string that holds either "M" or "F"
// ViewModelCamper.gender is enum of type Gender

Полагаю, так должно быть:

Mapper.CreateMap<DatabaseCamper, ViewModelCamper>().ForMember(x => x.Gender, ...

Не могли бы вы закончить этот фрагмент?

Спасибо.

UPD. или давайте добавим немного соли к нему. Что если у меня есть свойство в сопоставлении класса Destination (в данном случае ViewModelCamper), которого у меня изначально нет в классе Source, и значение должно быть рассчитано?

1 Ответ

3 голосов
/ 18 апреля 2011

Используйте IValueResolver (или IValueFormatter, если собираетесь в строку).Например, если поле не обнуляется, если оно не указано, поскольку оно упрощает обработку ошибок ...

public class GenderValueResolver : ValueResolver<string, Gender?>
{
    protected override Gender? ResolveCore(string source)
    {
        if (source.StartsWith("M", System.StringComparison.OrdinalIgnoreCase))
        {
            return Gender.Male;
        }

        else if (source.StartsWith("F", System.StringComparison.OrdinalIgnoreCase))
        {
            return Gender.Female;
        }

        return null;
    }
}

public class GenderValueFormatter : ValueFormatter<Gender?>
{
    protected override string FormatValueCore(Gender? value)
    {
        switch (value)
        {
            case Gender.Male:
                return "M";
            case Gender.Female:
                return "F";
            default:
                return null;
        }
    }
}

использование ...

.ForMember(dest => dest.Gender, opt => opt.ResolveUsing(typeof(GenderValueResolver)).FromMember(src => src.Gender))

или

.ForMember(dest => dest.Pages, opt => opt.AddFormatter<GenderValueFormatter>())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...