В AutoMapper 8.0 отсутствует GetPropertyMaps - PullRequest
0 голосов
/ 19 ноября 2018

До AutoMapper 8.0 я использовал этот код, чтобы найти сопоставление свойств по строке, например: модель сущности имеет свойство с именем "currency_id", а DTO имеет свойство с именем "currency".Я определил двунаправленное отображение в AutoMapper, и я использовал этот код для поиска свойства источника / цели relat

    public static string GetDestinationPropertyFor<TSrc, TDst>(IMapper IMapper, string sourceProperty)
    {
        var mapper = AutoMapper.IMapper.ConfigurationProvider;

        // TSrc = source generic type
        // TDst = destination generic type
        var map = mapper.FindTypeMapFor<TSrc, TDst>();

        var propertyMap = map.GetPropertyMaps()
                              .FirstOrDefault(pm => 
                                    pm.SourceMember.Name == sourceProperty
                              );


        return propertyMap.DestinationProperty.Name;
    }

В профиле AutoMapper:

        this.CreateMap<EntityModels.contact, DTO.contact>()
            .ForMember(m => m.currency, src => src.MapFrom(f => f.currency_id))
        ;

        this.CreateMap<DTO.contact, EntityModels.contact>()
            .ForMember(m => m.currency_id, src => src.MapFrom(f => f.currency))
        ;

Когда я назвал свой метод какthis:

var _dboField = GetDestinationPropertyFor<DTO.contact, EntityModels.contact>(this.mapper, "currency");

Console.WriteLine(_dboField);
// output should be "currency_id"

После обновления до AutoMapper 8.0 я получил эту ошибку при сборке:

'TypeMap' не содержит определения для GetPropertyMaps и не принимает доступный метод расширения GetPropertyMapsпервый аргумент типа 'TypeMap' может быть найден (вам не хватает директивы using или ссылки на сборку?)

Что такое замены для GetPropertyMaps в AutoMapper 8.0?

Спасибо!

1 Ответ

0 голосов
/ 25 ноября 2018

Как предположил Люциан, MemberMaps является возможной заменой.Однако PropertyMaps делает то же самое, что и GetPropertyMaps в AutoMapper 7.0.DestinationProperty также был переименован в DestinationMember.

Код AutoMapper 7.0:

public static string GetDestinationPropertyFor<TSrc, TDst>(IMapper IMapper, string sourceProperty)
    {
        var mapper = AutoMapper.IMapper.ConfigurationProvider;

        // TSrc = source generic type
        // TDst = destination generic type
        var map = mapper.FindTypeMapFor<TSrc, TDst>();

        var propertyMap = map.GetPropertyMaps()
                              .FirstOrDefault(pm => 
                                    pm.SourceMember.Name == sourceProperty
                              );


        return propertyMap.DestinationProperty.Name;
    }

Код AutoMapper 8.0:

public static string GetDestinationPropertyFor<TSrc, TDst>(IMapper IMapper, string sourceProperty)
    {
        var mapper = AutoMapper.IMapper.ConfigurationProvider;

        // TSrc = source generic type
        // TDst = destination generic type
        var map = mapper.FindTypeMapFor<TSrc, TDst>();

        var propertyMap = map.PropertyMaps
                              .FirstOrDefault(pm => 
                                    pm.SourceMember.Name == sourceProperty
                              );


        return propertyMap.DestinationMember.Name;
    }
...