Я только начинаю работать с 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?
Большое спасибо или те, кто может мне помочь.