Как передать значение поля вложенному объекту от родителя при использовании autopper? - PullRequest
0 голосов
/ 03 апреля 2019

Я пытаюсь отобразить объекты с помощью автоматического средства.

Моя входная модель:

public class Input
{
    public int ID { get; set; }
    public ICollection<NestedObject> NestedObjects { get; set; }
}
public class NestedObject
{
    public string SomeString { get; set; }
}

Моя выходная модель:

public class Output
{
    public int ID { get; set; }
    public ICollection<OutputNestedObject> OutputNestedObjects { get; set; }
}

public class OutputNestedObject
{
    public int InputID { get; set; }
    public string SomeString { get; set; }
}

Мой код отображения:

[Test]
public void TestNesting()
{
    var mapper = new MapperConfiguration(cfg =>
    {
        cfg.CreateMap<Input, Output>()
            .ForMember(x=> x.OutputNestedObjects, src=> src.MapFrom(x=> x.NestedObjects))
            ;
    }).CreateMapper();

    var input = new Input()
    {
        ID = 111,
        NestedObjects = new List<NestedObject>()
        {
            new NestedObject(){SomeString = "sometext"},
        }
    };

    var output = mapper.Map<Output>(input);

    Assert.AreEqual(input.ID, output.ID);

    var inputNested = input.NestedObjects.First();
    var outputNested = output.OutputNestedObjects.First();

    Assert.AreEqual(input.ID, outputNested.InputID);
    Assert.AreEqual(inputNested.SomeString, outputNested.SomeString);

}

Теперь у меня AutoMapperMappingException:

Unmapped properties: InputID

Я хочу получить объект Output с вложенным объектом OutputNestedObject с идентификатором объекта Input.Как это сделать?

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 03 апреля 2019

В качестве обходного пути я использую это решение:

var mapper = new MapperConfiguration(cfg =>
{
    cfg.CreateMap<NestedObject, OutputNestedObject>();
    cfg.CreateMap<Input, Output>()
        .ForMember(x => x.OutputNestedObjects, src => src.MapFrom(x=> x.NestedObjects ))
        .AfterMap((src, dest) =>
        {
            foreach (OutputNestedObject nested in dest.OutputNestedObjects)
            {
                nested.InputID = src.ID;
            }
        })
        ;
}).CreateMapper();
0 голосов
/ 03 апреля 2019

Вы должны добавить отображение из NestedObjects в OutputNestedObjects.

Automapper не будет отображать объекты без явного отображения, если некоторые свойства отсутствуют.

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