Как перевернуть отображение нескольких элементов сущности, которые явно отображаются в C# — автомате?

#c# #automapper

Вопрос:

Я работаю над приложением на C#, в котором мне нужно сопоставить 2 объекта. Итак, я определяю Создание карты, как показано ниже:

 CreateMap<Source, Destination>()
                .ForMember(dest => dest.FirstName, map => map.MapFrom(src => src.Name.First))                                                                                           
                .ForMember(dest => dest.LastName, map => map.MapFrom(src => src.Name.Last))
                .ForMember(dest => dest.SSN, map => map.MapFrom(src => src.SSN))
                .ForMember(dest => dest.HomePhoneNo, map => map.MapFrom(src => src.HomePhoneNumber()))
                .ForMember(dest => dest.Address, map => map.MapFrom(src => src.Address))
                .ForMember(dest => dest.MaritalStatus, map => map.MapFrom(src => (int)src.MaritalStatus))
 

Теперь я хочу сделать обратную карту, но когда я добавлю .Обратная карта для каждого участника, в следующем элементе строки, src и dest переключаются. Итак, есть ли какой-либо способ создать обратную карту для всех участников только в одном месте?

Комментарии:

1. Вы пробовали добавлять ReverseMap() в конце всех звонков?

2. Я добавил ReverseMap() в конце каждой строки; вот так: .ForMember(dest => dest. Имя, карта => map.MapFrom(src =>> src.Name. Сначала)).Обратная карта() .Элемент формы(dest => dest. Фамилия, карта => map.MapFrom(src =>> src.Name.Last)) .ReverseMap (), но для последнего имени, он выдает ошибку, так как src и dest переключены…

3.Да, но что, если вы просто сделаете это после последнего ForMember() ?

4. На самом деле я этого не пробовал, дело в том, что я не могу протестировать эту часть API… так что не уверен, работает ли это для всех или нет.

5. Вы пробовали это для нескольких участников, и это сработало? если да, то я могу сделать это для всех моих участников.

Ответ №1:

Поместите только один ReverseMap() в конец всех пользовательских сопоставлений.

Это работает для меня:

 using AutoMapper;

class Program
{
    static void Main(string[] args)
    {            
        var configuration = new MapperConfiguration(cfg =>
        {
            cfg.CreateMap<X, Y>()
            .ForMember(dest => dest.Bar1, map => map.MapFrom(src => src.Foo1))
            .ForMember(dest => dest.Bar2, map => map.MapFrom(src => src.Foo2))
            .ReverseMap()                ;                
        });
        configuration.AssertConfigurationIsValid();
        var mapper = configuration.CreateMapper();
        var x1 = new X() {  Foo1 = "1", Foo2 = "2"};
        var mappedY = mapper.Map<Y>(x1);
        var againX = mapper.Map<X>(mappedY);
        Console.WriteLine($"{againX.Foo1} {againX.Foo2}");
    }
}

class X
{
    public string Foo1 { get; set; }
    public string Foo2 { get; set; }
}

class Y
{
    public string Bar1 { get; set; }
    public string Bar2 { get; set; }
}