Передать несколько параметров в автомат - PullRequest
0 голосов
/ 07 мая 2018

У меня есть сопоставление между моим объектом домена и контрактом, как показано ниже: -

public class Car
{
    string name { get; set; }

    string model{ get; set; }

    CarProperties properties { get; set; }
}

public class CarProperties 
{
    string color { get; set; }

    string type { get; set; }
}

public class CarContract
{
    string name { get; set; }

    string model{ get; set; }

    string color { get; set; }

    string type { get; set; }

    string status { get; set; }
}

public static Car GetCreateCarPayloadFromCarContract(CarContract carContract, string name, ModelType modelType)
{
    var car= new Car
    {
        name = name,
        model= modelType.ToString(),
        properties = new CarProperties
        {
            color = carContract.color,
            type = carContract.type
        },
        status = Status.READY.ToString()
    };

    return car;
}

Здесь ModelType и Status являются перечислениями. Я пытаюсь преобразовать метод GetCreateCarPayloadFromCarContract для использования автомата. Ниже то, что я сделал до сих пор. Однако я не могу отобразить имя и модель. Как я могу передать эти параметры в автомат? И то, что я сделал для статуса, это хорошо?

CreateMap<Car,CarContract>()
    .ForMember(dest => dest.color, opt => opt.MapFrom(src => src.properties.color))
    .ForMember(dest => dest.type, opt => opt.MapFrom(src => src.properties.type))
    .ReverseMap()
    .ForMember(dest => dest.properties.color, opt => opt.MapFrom(src => src.color))
    .ForMember(dest => dest.properties.type, opt => opt.MapFrom(src => src.type))
    .ForMember(dest => dest.status, opt => opt.MapFrom(src => Status.READY.ToString()))

Может кто-нибудь помочь?

1 Ответ

0 голосов
/ 07 мая 2018

Я считаю, что ваш код имеет следующее наблюдение

  1. , если Properties объект не инициализирован по умолчанию в CarContract класс.
  2. Чтобы отобразить статус и модель, вы должны Enum.Parse метод.
  3. status всегда устанавливается в состояние готовности вместо значения сопоставленного объекта.

Используйте следующий код:

      CreateMap<Car,CarContract>()
     .ForMember(dest => dest.color, opt => opt.MapFrom(src => 
      src.properties.color))
      .ForMember(dest => dest.type, opt => opt.MapFrom(src => 
      src.properties.type))
     .ForMember(dest => dest.model, opt => opt.MapFrom(src => (<<Your Model 
      Enum Type>>)Enum.Parse(typeof(<<Your Model Enum Type>>), src.model)))
     .ForMember(dest => dest.status, opt => opt.MapFrom(src => (<<Your Status 
      Enum Type>>)Enum.Parse(typeof(<<Your Status Enum Type>>), src.status)))
     .ReverseMap()
     .ForMember(dest => dest.properties, opt => opt.MapFrom(src => new 
     CarProperties() { color = src.color, type = src.type }))
     .ForMember(dest => dest.status, opt => opt.MapFrom(src => src.status.ToString()))
     .ForMember(dest => dest.model, opt => opt.MapFrom(src => src.model.ToString()))

Убедитесь, что вы заменили <> на соответствующие перечисления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...