#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; }
}