Форум программистов, компьютерный форум, киберфорум
C#: ASP.NET Core
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 05.02.2021
Сообщений: 11
1

Маппинг значений

21.07.2022, 19:01. Показов 1049. Ответов 12

Author24 — интернет-сервис помощи студентам
Доброго времени суток.
Вот такая есть интересная задача, надеюсь зайдет.

Предположим, у нас есть некий реквест:
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
{
    "Singles": [
        12,
        13,
        14,
        15
    ],
    "Objects": [
        1,
        2,
        3,
        4
    ],
    "Integers": [
        9,
        8,
        7,
        6,
        5
    ],
    "Booleans": [
        true,
        false,
        true,
        false
    ]
}
так же есть модель:
C#
1
2
3
4
5
6
7
public class Props
    {
        public Single[] Singles { get; set; }
        public Single[] Objects { get; set; }
        public Int16[] Integers { get; set; }
        public Boolean[] Booleans { get; set; }
    }
и есть модель из БД (так же есть таблица с в БД):
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class DbProps
    {
        public Single SS1 { get; set; }
        public Single OBJ1 { get; set; }
        public Int16 INT1 { get; set; }
        public Boolean BOOL1 { get; set; }
        
        public Single SS2 { get; set; }
        public Single OBJ2 { get; set; }
        public Int16 INT2 { get; set; }
        public Boolean BOOL2 { get; set; }
        
        public Single SS3 { get; set; }
        public Single OBJ3 { get; set; }
        public Int16 INT3 { get; set; }
        public Boolean BOOL3 { get; set; }
        
        public Single SS4 { get; set; }
        public Single OBJ4 { get; set; }
        public Int16 INT4 { get; set; }
        public Boolean BOOL4 { get; set; }
    }
при чем таких значений может быть до 10

А теперь самое интересное, как мапить значения из реквеста в соответствующие поля таблицы в БД (естественно в ручную прописывать все значения не ок)
То есть что бы SS1 = Singles[0], SS2 = Singles[1], OBJ1 = Objects[0] и так далее
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.07.2022, 19:01
Ответы с готовыми решениями:

Проект с простыми моделями, где будет реализован маппинг предиката
Добрый вечер Хелп, не получается выполнить то что в этой ссылке приводится ...

маппинг на основе Code First
Всем привет, мне интересно узнать как на Code First я скажем могу пометить, что какое-то поле имеет...

Маппинг
Только начал осваивать -не ругайте)Задание первое Промаппить с помощью ADO.Net Entity Framework...

Маппинг портов
На удаленном компе ПК2 сидит служба, слушает 90 порт. на ПК1 есть утилита которая отправляет пакет...

Hibernate - маппинг
Добрый день. Есть таблица CREATE TABLE `role` ( `id` int auto_increment NOT NULL, `name`...

12
403 / 265 / 69
Регистрация: 12.04.2020
Сообщений: 1,406
21.07.2022, 20:17 2
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class DbProps
    {
        public Single SS1 { get; set; }
        public Single OBJ1 { get; set; }
        public Int16 INT1 { get; set; }
        public Boolean BOOL1 { get; set; }
        
        public Single SS2 { get; set; }
        public Single OBJ2 { get; set; }
        public Int16 INT2 { get; set; }
        public Boolean BOOL2 { get; set; }
        
        public Single SS3 { get; set; }
        public Single OBJ3 { get; set; }
        public Int16 INT3 { get; set; }
        public Boolean BOOL3 { get; set; }
        
        public Single SS4 { get; set; }
        public Single OBJ4 { get; set; }
        public Int16 INT4 { get; set; }
        public Boolean BOOL4 { get; set; }
    }
переделывайте таблицу
0
0 / 0 / 0
Регистрация: 05.02.2021
Сообщений: 11
21.07.2022, 22:16  [ТС] 3
не вариант
0
403 / 265 / 69
Регистрация: 12.04.2020
Сообщений: 1,406
22.07.2022, 00:59 4
C#
1
2
3
4
5
6
7
public class Props
    {
        public Single Single { get; set; }
        public Single Object { get; set; }
        public Int16 Integer { get; set; }
        public Boolean Boolean { get; set; }
    }
предположу возвращать List<Props> длиной в 4 Props, так проще свалидировать, а не багать по куче разным массивам
подрубить автомапер где ручками прописать что куда мапить на DbProps
0
Эксперт .NET
12505 / 8692 / 1310
Регистрация: 21.01.2016
Сообщений: 32,661
22.07.2022, 02:52 5
Alex-D-Holliday, почему single и int16, а не float и int? Это вы так память экономить на спичках пытаетесь?

Цитата Сообщение от Alex-D-Holliday Посмотреть сообщение
и есть модель из БД (так же есть таблица с в БД):
И это кривая модель. Правильный вариант тут либо массивы прямо в полях хранить (если база позволяет, то натурально, если нет - то в виде строки, через запятую), либо разносить наборы данных по разным записям.

C#
1
2
3
4
5
6
7
public class DbProps
    {
        public Single SS { get; set; }
        public Single OBJ { get; set; }
        public Int16 INT { get; set; }
        public Boolean BOOL { get; set; }
}
Последнее работает на любой СУБД и довольно широко применяется.

Цитата Сообщение от Alex-D-Holliday Посмотреть сообщение
не вариант
Так и скажите, что просто лениво)

Цитата Сообщение от Dr9vik Посмотреть сообщение
подрубить автомапер где ручками прописать что куда мапить на DbProps
Не рекомедуйте этот инструмент никому. Взять автомапер, чтобы потом РУЧКАМИ прописывать что-то. Не проще ли всё тоже самое прописать ручками БЕЗ автомапера?)
0
0 / 0 / 0
Регистрация: 05.02.2021
Сообщений: 11
22.07.2022, 10:28  [ТС] 6
Dr9vik
Цитата Сообщение от Dr9vik Посмотреть сообщение
предположу возвращать List<Props> длиной в 4 Props, так проще свалидировать, а не багать по куче разным массивам
сорри, мой косяк... на самом в модели могут быть и другие поля(не обязательно массивы), но длина массивов этих основных будет всегда одинаковой


Usaga, вы не о том думаете
Цитата Сообщение от Usaga Посмотреть сообщение
почему single и int16, а не float и int? Это вы так память экономить на спичках пытаетесь?
это обычный пример каких то там типов данных и акцент на том, что они могут быть разные и я не спрашивал, кривая это модель или нет, вопрос задачи состоит в другом

Цитата Сообщение от Usaga Посмотреть сообщение
Так и скажите, что просто лениво)
причина в другом

Цитата Сообщение от Usaga Посмотреть сообщение
Не рекомедуйте этот инструмент никому
к сожалению, он подрублен и боюсь, что придется еще что то доп мапить(
0
403 / 265 / 69
Регистрация: 12.04.2020
Сообщений: 1,406
22.07.2022, 11:22 7
Цитата Сообщение от Usaga Посмотреть сообщение
Не рекомедуйте этот инструмент никому.
в нем есть свои плюсы и минусы

Добавлено через 4 минуты
Цитата Сообщение от Alex-D-Holliday Посмотреть сообщение
сорри, мой косяк... на самом в модели могут быть и другие поля(не обязательно массивы)
ну если не массивы они будут типа общие
просто создайте тогда 2 класса где в первом будут поля не массивы и собственно 1 поле то что я сверху написал
C#
1
2
3
4
5
6
7
class A
{
    public string A1{get;set;}
    public string A2{get;set;}
    ...
    public List<Props> Items{get;set;}
}
а если выкинуть на мороз автомапер, как впрочем некоторые и делают...да ручками прописывать
1
Эксперт .NET
12505 / 8692 / 1310
Регистрация: 21.01.2016
Сообщений: 32,661
23.07.2022, 12:30 8
Цитата Сообщение от Dr9vik Посмотреть сообщение
в нем есть свои плюсы и минусы
И какие для себя вы плюсы видите в нём?
0
403 / 265 / 69
Регистрация: 12.04.2020
Сообщений: 1,406
23.07.2022, 13:47 9
Цитата Сообщение от Usaga Посмотреть сообщение
И какие для себя вы плюсы видите в нём?
2 одинаковые модели и между ними надо замапить
проще 1 строчку написать и больше ничего
0
2756 / 2059 / 384
Регистрация: 22.07.2011
Сообщений: 7,781
28.07.2022, 18:35 10
Цитата Сообщение от Usaga Посмотреть сообщение
Не рекомедуйте этот инструмент никому. Взять автомапер, чтобы потом РУЧКАМИ прописывать что-то. Не проще ли всё тоже самое прописать ручками БЕЗ автомапера?)
не проще , если модель нужно отражать туда сюда обратно в различных местах приложения , проще вместо этого прописать var dst = mapper.Map(src); Да и сам маппер может содержать логику отражения чуть сложнее нежели простое присваивание , ее тоже многократно повторять не придется.
Из минусов - это может быть достаточно медленно , особенно если логика маппинга сложная , нужно применять и конфигурировать аккуратно в чувствительных местах.
0
Эксперт .NET
12505 / 8692 / 1310
Регистрация: 21.01.2016
Сообщений: 32,661
29.07.2022, 11:25 11
Цитата Сообщение от Dr9vik Посмотреть сообщение
2 одинаковые модели и между ними надо замапить
проще 1 строчку написать и больше ничего
Это когда у вас внатуре две одинаковые модели. Именно для такого сценария Automapper и создавался. Но в реальных проектах модели далеко не одинаковые.

Цитата Сообщение от sau Посмотреть сообщение
не проще , если модель нужно отражать туда сюда обратно в различных местах приложения , проще вместо этого прописать var dst = mapper.Map(src); Да и сам маппер может содержать логику отражения чуть сложнее нежели простое присваивание , ее тоже многократно повторять не придется.
Так вручную написанный маппер тоже в одну строчку вызывается. И в разных местах его многократно можно вызывать. И логику сложную в него пихать, включая инжектирование сервисов. Прикол в том, что с Automapper писанины такой будет БОЛЬШЕ. Ведь нужно будет эту логику заворачивать в API самого Automapper'а.

Я не просто так это говорю. Уже проходили.
0
0 / 0 / 0
Регистрация: 05.02.2021
Сообщений: 11
29.07.2022, 18:08  [ТС] 12
Usaga, Dr9vik, sau,
граждане, вопрос был не об плюсах и минусах Automapper, вы ошиблись темой
не можете ничего конкретного предложить, проходите мимо
0
Эксперт .NET
12505 / 8692 / 1310
Регистрация: 21.01.2016
Сообщений: 32,661
29.07.2022, 20:19 13
Alex-D-Holliday, вроде бы на ваш вопрос ответили уже.
0
29.07.2022, 20:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.07.2022, 20:19
Помогаю со студенческими работами здесь

Маппинг сервлетов
добрый вечер, имеются проблемы с переходом по сервлетам. есть файл index.html, с которого...

Маппинг в Fluent NHibernate
Доброго времени суток есть таблица с пользователями public class User { public...

EntityFrameworkCore 6 маппинг колонок
Добрый день, в базе есть колонка с внешним ключом ThreadId. На бэке принципиально не хочу создавать...

Маппинг файлов в Win
Портирую проект из *nix с mmap() в win. В *nix, mmap() маппирует файл с диска в память страницами...

CsvHelper: маппинг и прочее
Добрый день! Пытаюсь использовать CsvHelper для чтения файла с записями нескольких типов. Если...

Маппинг запроса в DTO
Всем привет! Столкнулся с определенными трудностями. Приложение написано на spring boot + spring...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru