У меня есть список объектов, которые загружаются из базы данных, давайте назовем их «MyObjects», затем у меня есть список объектов расширений «ExtensionsObjects», которые загружаются из отдельной базы данных. Я использую automapper, чтобы отобразить некоторые свойства этих объектов расширения в «MyObjects». (Объект расширения содержит ключевое поле для MyObject)
Это работает, поля правильно отображаются из ExtentionObject в MyObject, но автоматический обработчик возвращает список, который возвращает только те «MyObjects», в которые был отображен «ExtensionObject». (и MyObject без объекта Extention является совершенно допустимой ситуацией).
Код, который я использую для сопоставления:
//first get the lists of MyObjects and ExtentionObjects
List<MyObject> myObjects = GetMyObjects();
List<ExtentionObject> extentionObjects = GetExtentionObjects();
//execute the mapping (_mapper is my automapper)
myObjects = _mapper.Map(extentionObjects, myObjects);
//myObject now contains less objects than before the call to the mapper
Код для конфигурации автоматического устройства (cfg является средством отображения). конфигурация, используемая для создания сопоставителя):
cfg.CreateMap<ExtentionObject, MyObject>()
.EqualityComparison((eo, my)=> CheckForEquality(eo, my))
.ForMember(....)
.ForMember(....)
.ReverseMap().ConvertUsing((mo, eo)=>
{
var ext = new ExtentionObect();
...
return ext;
});
Функция проверки на равенство просто проверяет, совпадают ли идентификаторы ExtentionObject и MyObject.
Я хочу, чтобы результирующий список содержал все элементы, которыегде в оригинальном списке «myObjects». Информация в экземплярах ExtentionObject должна быть добавлена в соответствующие экземпляры MyObject, но поскольку расширение является необязательным, все «MyObjects» должны оставаться в результирующем списке.
Допустим, моя база данных содержит MyObjects с ключами 1, 2,3и ExtentionObjects с ключом 1 и 3.
//before this cal myObjects contains 3 items, ExentionObjects contains 2
myObjects = _mapper.Map(extentionObjects, myObjects);
//after this cal myObjects contains only 2 items,
//with the properties from Extentionobject 1 and 3 correctly mapped to MyObject 1 and 3,
//ERROR => MyObject 2 has "disappeared" from the 'destination' list
Вопрос «Как сохранить объект 2 в моем списке»?