Как отобразить нулевое свойство в списке объектов с указанными c идентификаторами в autopper in. net core - PullRequest
0 голосов
/ 08 апреля 2020

Я только начинаю работать с automapper, поэтому у меня очень мало идей о том, как это сделать, но я прочитал статью о том, как его настроить, и я не уверен на 100%, выполнимо ли это в autoMapper? но у меня есть ощущение, что это так.

Итак, вот сценарий, у меня есть ResultModel:

public class ResultModel
{
   public int Id { get; set; }
   public int? StatusId { get; set; }
   public string StatusName { get; set; }

   ...other properties
}

обратите внимание, что StatusId обнуляется, это потому, что мне нужно заполнить это основано на другой модели, которая является DataModel

public class DataModel
{
   public int Id { get; set; }
   public int StatusId { get; set; }
   public string StatusName { get; set; }
}

, поэтому у меня есть список обеих моделей, затем мне нужно заполнить ResultModel StatusId и StatusName, где DataModel Id совпадает с ResultModel Id.

так, например, у меня есть эти данные:

ResultModel:
| Id | StatusId | StatusName     | OtherColumns |
| 1  | null     | null           | ...          |
| 2  | 1        | sName          | ...          |
| 3  | null     | null           | ...          |

DataModel:
| Id | StatusId | StatusName     |
| 1  | 2        | sName2         |
| 2  | 1        | sName          |
| 3  | 2        | sName2         |

Когда я сопоставляю ResultModel и DataModel, я хотел бы получить что-то подобное в моей ResultModel:

| Id | StatusId | StatusName     | OtherColumns |
| 1  | 2        | sName2         | ...          |
| 2  | 1        | sName          | ...          |
| 3  | 2        | sName2         | ...          |

поэтому будут заполнены все пустые значения statusId и statusName, которые имеют совпадающий Id в DataModel.

-

Вот что у меня есть

Профиль Mapper:

CreateMap<DataModel, ResultModel>()
   .ForMember(dest => dest.StatusId, conf => conf.MapFrom(src => src.StatusID))
   .ForMember(dest => dest.StatusName, conf => conf.MapFrom(src => src.StatusName));

тогда у меня есть вспомогательный метод, который отображает два объекта в один для меня

public static TResult MergeInto<TResult>(this IMapper mapper, object item1, object item2)
{
   return mapper.Map(item2, mapper.Map<TResult>(item1));
} 

Тогда вот что на моем контроллере:

List<ResultModel> resultData = await _getResultData();

List<DataModel> data = await _getData();

var result = _mapper.MergeInto<List<ResultModel>>(data, resultData);

но это Похоже, что он не имел никакого эффекта, он все равно просто возвращал старые данные из переменной resultData.

Возможно ли это сделать в autoMapper?

Большое спасибо или те, кто может мне помочь.

...