Как сопоставить массив с несколькими строками в базе данных с помощью AutoMapper?

#c# #asp.net-core #automapper

#c# #asp.net-core #automapper

Вопрос:

На одном ASP.NET ОСНОВНАЯ реализация API, допустим, у меня есть простая бизнес-модель, подобная этой:

 public class MyClass
{
    public MyClass()
    {

    }

    public int UserId { get; set; }

    public int[] UserValues { get; set; }
}
  

И я получаю объект JSON, подобный этому:

 {
    "userId": 1,
    "userValues": [4, 5, 6]
}
  

Моя цель здесь — сохранить в базе данных строку для каждого userValues для этого конкретного пользователя, вот так:

 UserId | UserDbValues
------- -------------
 1     | 4
 1     | 5
 1     | 6
------- -------------
  

Можно ли было бы добиться этого с помощью AutoMapper? Или мне нужно вручную выполнить цикл и сохранить каждую строку?

Я только начинаю знакомиться с AutoMapper, так что это может быть что-то действительно тривиальное или даже вообще невозможное. Я попытался отобразить это таким образом, но это не сработало:

 CreateMap<MyClass, MyDtoClass>()
    .ForMember(dest => dest.userDbValues, opt => opt.MapFrom(src => src.userValues));
  

Большое спасибо за любой совет, который у вас может быть!

Комментарии:

1. Вероятно, это проще сделать и понять, не привлекая AutoMapper для расширения. Это звучит как задание для десериализатора JSON. Вы могли бы сделать пользовательский конвертер типов AutoMapper для int вашего User типа. И вы все равно можете в конечном итоге выполнить цикл для сохранения записей.

2. Поделитесь с нами кодом, который вы сохранили MyClass в базе данных. Это не связано с AutoMapper, который преобразует только MyDtoClass в MyClass . Ключевым моментом является то, как вы будете вставлять myClass . в общем, вам нужно выполнить цикл, UserValues чтобы вставить UserValue таблицу.