Automapper - отображение индекса в свойство коллекции - PullRequest
0 голосов
/ 18 февраля 2020

Я сопоставляю модель предметной области с DTO и наоборот. Я пытаюсь настроить мой API для приема DTO с коллекцией, где порядок этой коллекции будет соответствовать int Sequence в моем доменном объекте для сохранения.

public class Model {
    public ICollection<Fields> Fields { get; set; }
}
public class Field {
    public int Sequence { get; set; }
}
CreateMap<ModelView, Model>()
    .ForMember(x => x.Fields, opt => opt...)
    // here I want to specify that currentField.Sequence = Model.Fields.IndexOf(currentField)
    //     , or to set it equal to some counter++;
    ;

Является ли такой что-то возможно в Automapper, или мне придется написать свой собственный метод ConstructUsing(), чтобы сделать эту логику c? Я не решаюсь использовать ConstructUsing(), потому что у меня есть сопоставление, указанное для Field DTO, и я не хочу дублировать этот лог c.

. Я также хотел бы иметь возможность настроить его так что когда я возвращаюсь к своему DTO (Model -> ModelView), я могу вставить Field в коллекцию в порядке, указанном Sequence.

1 Ответ

1 голос
/ 18 февраля 2020

Я думаю, что нашел решение, которое искал. Используя AfterMap(), я могу переопределить эти значения из сопоставления напрямую:

CreateMap<Model, ModelView>()
    .AfterMap((m, v) =>
    {
        v.Fields = v.Fields?.OrderBy(x => x.Sequence).ToList(); 
        //ensure that the DTO has the fields in the correct order
    })
    ;


CreateMap<ModelView, Model>()
    .AfterMap((v, m) =>
    {
        //override the sequence values based on the order they were provided in the DTO
        var counter = 0;
        foreach (var field in m.Fields)
        {
            field.Sequence = counter++;
        }
    })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...