|
3 / 3 / 0
Регистрация: 07.11.2018
Сообщений: 119
|
||||||||||||||||
MS SQL Как красиво получить объект с подсчетом связанных данных25.07.2022, 02:42. Показов 2567. Ответов 30
Метки entityframework core (Все метки)
Возьму для примера объект Album у которого связь с объектами Image.
Мне нужно на сайт вернуть альбомы с количеством фото внутри. Я знаю как это сделать, но мне не нравятся мои варианты реализации. Я использую [NotMapped] поля для дополнительных данных в объекте модели. Первый вариант.
Второй вариант Перебрать все поля в новый объект, но учитывая массивность некоторых объектов я его не использую. Третий вариант Вернуть кортеж с 2 объектами (Альбом + Объект с деталями сущности)
По итогу я бы хотел видеть реализацию наподобие этой, но увы это не сработает, так как IQueryable не поддерживает тело в Select.
0
|
||||||||||||||||
| 25.07.2022, 02:42 | |
|
Ответы с готовыми решениями:
30
Подключил базу данных sql как оформить красиво? Получить адрес на переменную\объект, потом от этого адреса создать указатель на объект и изменить значение. Как? PHP и вывод значений из базы данных как оформить красиво |
|
14313 / 9393 / 1355
Регистрация: 21.01.2016
Сообщений: 35,427
|
|||
| 25.07.2022, 19:03 | |||
Сообщение было отмечено Nuril как решение
РешениеКласс сущности не более, чем СХЕМА модели данных. Сущности нужны только для формирования запросов. Не надо в них никакие [NotMapped] свойства пихать или кортежи на их основе делать. Вы когда голый SQL-запрос к базе будете писать, вы разве не указываете явно какие поля из каких таблиц взять?
1
|
|||
|
3 / 3 / 0
Регистрация: 07.11.2018
Сообщений: 119
|
|||||||||||||
| 26.07.2022, 08:31 [ТС] | |||||||||||||
|
Теперь код превратился из:
Будет ли верным заменить поле Albums в AccountWithDetails на тип AlbumWithDetails, чтобы класть туда данные и превращать всё за 1 маппинг аккаунта?
0
|
|||||||||||||
|
14313 / 9393 / 1355
Регистрация: 21.01.2016
Сообщений: 35,427
|
||
| 26.07.2022, 09:01 | ||
Automapper. Он тут не нужен вовсе. Поверьте)
0
|
||
|
14313 / 9393 / 1355
Регистрация: 21.01.2016
Сообщений: 35,427
|
|||
| 26.07.2022, 09:01 | |||
Automapper. Он тут не нужен вовсе. Поверьте)Не db.Albums.GetAlbums(accountWithDetails.Id, 2).ToList(), а db.Albums.GetAlbums(accountWithDetails.Id, 2).Select(x => ...).ToList()Выполняйте проекцию во время запроса. Заводите DTO под каждый запрос, где будут только те свойства, что нужны. Там же будут и свойства, которых нет в исходных сущностях. Только так.
0
|
|||
|
|
|
| 26.07.2022, 09:03 | |
|
Nuril, а не проще написать запрос SQL и показать что вам нужно в итоге? Чего сидеть гадать...
0
|
|
|
3 / 3 / 0
Регистрация: 07.11.2018
Сообщений: 119
|
||
| 26.07.2022, 09:32 [ТС] | ||
|
0
|
||
|
14313 / 9393 / 1355
Регистрация: 21.01.2016
Сообщений: 35,427
|
|
| 26.07.2022, 09:45 | |
|
Nuril, да. Либо сразу в методе GetAlbums выполнить проекцию. И зачем вы итератор возвращаете, когда вам лист нужен?
0
|
|
|
3 / 3 / 0
Регистрация: 07.11.2018
Сообщений: 119
|
|
| 26.07.2022, 09:59 [ТС] | |
|
0
|
|
|
14313 / 9393 / 1355
Регистрация: 21.01.2016
Сообщений: 35,427
|
||
| 26.07.2022, 10:17 | ||
|
0
|
||
|
1341 / 920 / 265
Регистрация: 08.08.2014
Сообщений: 2,768
|
|||||||
| 26.07.2022, 13:33 | |||||||
|
Но репозиторий/датасервис - не должен наружу раскрывать ничего, что касается особенностей реализации хранилища данны:
2
|
|||||||
|
3 / 3 / 0
Регистрация: 07.11.2018
Сообщений: 119
|
|||||||||||||||||
| 26.07.2022, 15:29 [ТС] | |||||||||||||||||
0
|
|||||||||||||||||
|
1341 / 920 / 265
Регистрация: 08.08.2014
Сообщений: 2,768
|
||
| 26.07.2022, 15:30 | ||
|
И в вашем примере 'AlbumDto' не должен содержать в себе коллекцию 'Image' (это ведь в вашем случае EF-сущность?).
2
|
||
|
3 / 3 / 0
Регистрация: 07.11.2018
Сообщений: 119
|
|
| 26.07.2022, 15:36 [ТС] | |
|
0
|
|
|
1341 / 920 / 265
Регистрация: 08.08.2014
Сообщений: 2,768
|
||
| 26.07.2022, 15:44 | ||
|
Только не очень понимаю, зачем вам отдельное свойство "ImageCount" заводить (ещё и строкового типа). У вас ведь всё равно изображения в подчинённой коллекции есть в этом DTO. И вы их целиком материализуете. А значит и количество элементов коллекции вам известно.
0
|
||
|
|
|
| 26.07.2022, 15:46 | |
|
Nuril, Ну у вас же БД выступает моделью, зачем вам еще плодить кучу DTO? У вас ведь есть класс данных, который описывает таблицу или VIEW. Вот его и можно гонять по всему приложению, это ведь по сути и есть DTO, так как в нём нет никакой реализации логики, ну может если только
ToString() переопределить. А модель, БД, будет неизменной со своей БЛ и т.д.
1
|
|
|
1341 / 920 / 265
Регистрация: 08.08.2014
Сообщений: 2,768
|
||
| 26.07.2022, 15:50 | ||
|
0
|
||
|
3 / 3 / 0
Регистрация: 07.11.2018
Сообщений: 119
|
|||
| 26.07.2022, 15:52 [ТС] | |||
|
0
|
|||
|
1341 / 920 / 265
Регистрация: 08.08.2014
Сообщений: 2,768
|
|
| 26.07.2022, 15:53 | |
|
Andrey-MSK
Т.е. по сути, у вас получается, что структура запросов/ответов внешнего API жёстко привязана к структуре данных хранилища (если использовать EF-сущности во всех слоях в качестве DTO). Т.е. добавили в базу какое-то вспомогательное системное поле - оно автоматом опубликовалось в API. Неудобно.
0
|
|
|
|
||||||
| 26.07.2022, 15:56 | ||||||
|
kotelok, А что может потянуть класс данных в EF? Аннотации? Дак они не из из библиотек EF, они из System.
0
|
||||||
| 26.07.2022, 15:56 | |
|
Помогаю со студенческими работами здесь
20
Как получить DataTable из двух связанных таблиц? Как, используя рефлексию, получить перечень событий, связанных с той же кнопкой?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2.
Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники".
В. . .
|
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии.
. . .
|
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
|
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут.
https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc
Первый документ красиво выглядит, но без схемы.
Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
|
|
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере".
Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
|
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти".
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
В качестве источника данных. . .
|
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер
Написал заготовку:
dotnet new console --aot -o UrlHandler
var items = args. Split(":");
var tag = items;
var id = items;
var executable = args;. . .
|
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3.
Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
|