Как я могу отобразить, когда у меня есть свойство в моем классе, который имеет конструктор по умолчанию для предоставления значений Autopper? - PullRequest
0 голосов
/ 02 апреля 2020

Я хочу создать отображение из UserDto в сущность User, пожалуйста, помогите мне, как мне этого добиться. У меня есть свойство GeoLocation в сущности пользователя, как сопоставить эти свойства. Может кто-нибудь, пожалуйста, дать решение с примером?

Я использую пакет AutoMapper: https://www.nuget.org/packages/AutoMapper/

Мой класс Entity:

public class User
    {
        public string Id { get; set; }

        public string Name { get; set; }

        public GeoLocation PurchaseLocationCoordinates { get; set; }
    }

Мой класс Dto:

public class UserDto
    {
        public string Id { get; set; } = Guid.NewGuid().ToString();

        public string Name { get; set; }

        public string PurchaseLocationLatitude { get; set; }

        public string PurchaseLocationLongitude { get; set; }
    }

Класс GeoLocation:

public class GeoLocation
    {
        public GeoLocation(double lon, double lat)
        {
            Type = "Point";
            if (lat > 90 || lat < -90) { throw new ArgumentException("A latitude coordinate must be a value between -90.0 and +90.0 degrees."); }
            if (lon > 180 || lon < -180) { throw new ArgumentException("A longitude coordinate must be a value between -180.0 and +180.0 degrees."); }
            Coordinates = new double[2] { lon, lat };
        }

        [JsonProperty("type")]
        public string Type { get; set; }
        [JsonProperty("coordinates")]
        public double[] Coordinates { get; set; }

        public double? Lat() => Coordinates?[1];
        public double? Lon() => Coordinates?[0];
    }

Отображение:

CreateMap<UserDto, User>();

1 Ответ

2 голосов
/ 03 апреля 2020

Вы можете обратиться к этому коду:

 var config = new MapperConfiguration(cfg =>
            {
                cfg.CreateMap<UserDto, User>()
    .ForMember(x => x.PurchaseLocationCoordinates, opt => opt.MapFrom(model => model));
                cfg.CreateMap<UserDto, GeoLocation>()
                 .ForCtorParam("lon", opt => opt.MapFrom(src => src.PurchaseLocationLongitude))
                  .ForCtorParam("lat", opt => opt.MapFrom(src => src.PurchaseLocationLatitude));
            });
            UserDto userdto = new UserDto()
            {
                PurchaseLocationLongitude = "80.44",
                PurchaseLocationLatitude = "34.56"
            };
            IMapper iMapper = config.CreateMapper();
            var user = iMapper.Map<UserDto, User>(userdto);
...