У меня возникли некоторые проблемы с отображением, которые, как я надеялся, может помочь сообществу.Я работаю с AutoMapper
версии 6.0 для установления связей между объектами.У меня есть три объекта (названных в общих чертах, поскольку сами данные на самом деле не имеют значения) со следующей структурой:
public ObjectA {
string field1 { get; set; }
string field2 { get; set; }
string field3 { get; set; }
string field4 { get; set; }
}
public ObjectB {
string field1 { get; set; }
string field2 { get; set; }
List<ObjectC> ObjectC { get; set; }
}
public ObjectC {
string field3 { get; set; }
string field4 { get; set; }
}
У меня есть пара настроенных карт, например:
Mapper.Initialize(cfg => {
cfg.CreateMap<ObjectC, ObjectA>();
cfg.CreateMap<ObjectB, ObjectA>();
});
Какиеподводит меня к моей проблеме.ObjectA
является прямым представлением таблицы БД и ее полей, и я хотел бы использовать ObjectB
для создания проверки записей в таблице с использованием ObjectA
и добавления любых, которые еще не существуют.Моя проблема в том, что я, похоже, не понимаю, как установить правильное соединение между ObjectB
и ObjectA
через AutoMapper
, в котором я проверяю для каждого возможного варианта, который ObjectB
может создать ObjectA
.
Конечная цель должна выглядеть примерно так:
ObjectA objectA = // mapped data from ObjectB with the contents of List Item [0]
var objectAExists = _dataHandlers.GetObjectA;
if (objectAExists)
{
// some code to return use to iterate back that this variant is in the DB already
log.Info("ObjectA Already Exists");
}
else
{
var results = storeContents(objectA);
log.Info("New Contents Stored");
}
// return to top of iteration and this time process with contents using ObjectB.ObjectC[1] being used, and so on.
Я пробовал ряд подходов, таких как:
// try to iterate through each List item...
for (int i = 0; i < ObjectB.ObjectC.Count; i++) {
//I wanted this to map the contents like so:
ObjectA objectA = new ObjectA() {
Field1 = ObjectB.Field1,
Field2 = ObjectB.Field2,
Field3 = ObjectB.ObjectC[i].Field3,
Field4 = ObjectB.ObjectC[i].Field4
}
// but I couldn't figure out how to make a similar association using AutoMapper...
}
// tried to iterate through each with a foreach loop... but was in a similar situation as above...
foreach (var objectC in ObjectB.ObjectC) { // some code... }
// I tried double mapping...
var objectA = Mapper.Map<ObjectA>(ObjectB);
objectA = Mapper.Map<ObjectA>(objectC); // new problem hits here
// when I attempted to add the data from the new mapping, it overwrote the data populated by the first mapping...
// Change '=' to '+=' wasn't possible, so that didn't help...
// altering the mapper...
cfg.CreateMap<ObjectB, ObjectA>()
.Include<ObjectC, ObjectA>();
Даже пытался использовать преобразователи типов ..... но столкнулся с другой стеной.Излишне говорить, что у меня мало идей, и документация AutoMapper, по-видимому, не предоставляет достаточно информации, чтобы помочь решить эту проблему.Буду очень признателен за любые советы, которые могут указать мне на решение ...
Спасибо всем заранее.