#c# #asp.net #asp.net-mvc #automapper
Вопрос:
Как сопоставить один объект вложенному объекту
Нижеприведенное — это моя сущность.
class Employee
{
public string name { get; set; }
public string city_name { get; set; }
public string State_name { get; set; }
}
Я хочу сопоставить
class Employee
{
public string Name;
public Location Location;
}
class Location
{
public string City;
public string State;
}
Обратите внимание, что имена апартаментов отличаются. Может ли кто-нибудь помочь сопоставить их с помощью AutoMapper
Комментарии:
1. Вам следует просто проверить документацию automapper и создать пользовательское сопоставление. похоже, образец документации automapper очень похож на ваш сценарий
Ответ №1:
Решение 1: ForPath
1.1 Создайте Profile
экземпляр с наследованием от Profile
и поместите конфигурацию в конструктор.
1.1.1 Использование ForPath для сопоставления вложенного свойства.
public class EmployeeProfile : Profile
{
public EmployeeProfile()
{
CreateMap<Employee, EmployeeDto>()
.ForPath(dest => dest.Location.City, opt => opt.MapFrom(src => src.city_name))
.ForPath(dest => dest.Location.State, opt => opt.MapFrom(src => src.State_name));
}
}
1.2 Добавление профиля в конфигурацию картографа
public static void Main()
{
var config = new MapperConfiguration(cfg =>
{
cfg.AddProfile<EmployeeProfile>();
// Note: Demo program to use this configuration rather with EmployeeProfile
/*
cfg.CreateMap<Employee, EmployeeDto>()
.ForPath(dest => dest.Location.City, opt => opt.MapFrom(src => src.city_name))
.ForPath(dest => dest.Location.State, opt => opt.MapFrom(src => src.State_name));
*/
});
IMapper mapper = config.CreateMapper();
var employee = new Employee{name = "Mark", city_name = "City A", State_name = "State A"};
var employeeDto = mapper.Map<Employee, EmployeeDto>(employee);
}
Пример решения 1 на скрипке .Net
Решение 2: AfterMap
2.1 Создайте Profile
экземпляр с наследованием от Profile
и поместите конфигурацию в конструктор.
2.1.1 Использование AfterMap для выполнения сопоставления вложенного свойства после появления карты.
public class EmployeeProfile : Profile
{
public EmployeeProfile()
{
CreateMap<Employee, EmployeeDto>()
.AfterMap((src, dest) => { dest.Location =
new Location {
City = src.city_name,
State = src.State_name
};
});
}
}
2.2 Добавление профиля в конфигурацию картографа
public static void Main()
{
var config = new MapperConfiguration(cfg =>
{
cfg.AddProfile<EmployeeProfile>();
// Note: Demo program to use this configuration rather with EmployeeProfile
/*
cfg.CreateMap<Employee, EmployeeDto>()
.AfterMap((src, dest) => { dest.Location =
new Location {
City = src.city_name,
State = src.State_name
};
});
*/
});
IMapper mapper = config.CreateMapper();
var employee = new Employee{name = "Mark", city_name = "City A", State_name = "State A"};
var employeeDto = mapper.Map<Employee, EmployeeDto>(employee);
}
Пример решения 2 на скрипке .Net