|
3 / 3 / 0
Регистрация: 07.11.2018
Сообщений: 119
|
||||||||||||||||
MS SQL Как красиво получить объект с подсчетом связанных данных25.07.2022, 02:42. Показов 2739. Ответов 30
Метки entityframework core (Все метки)
Возьму для примера объект Album у которого связь с объектами Image.
Мне нужно на сайт вернуть альбомы с количеством фото внутри. Я знаю как это сделать, но мне не нравятся мои варианты реализации. Я использую [NotMapped] поля для дополнительных данных в объекте модели. Первый вариант.
Второй вариант Перебрать все поля в новый объект, но учитывая массивность некоторых объектов я его не использую. Третий вариант Вернуть кортеж с 2 объектами (Альбом + Объект с деталями сущности)
По итогу я бы хотел видеть реализацию наподобие этой, но увы это не сработает, так как IQueryable не поддерживает тело в Select.
0
|
||||||||||||||||
| 25.07.2022, 02:42 | |
|
Ответы с готовыми решениями:
30
Подключил базу данных sql как оформить красиво? Получить адрес на переменную\объект, потом от этого адреса создать указатель на объект и изменить значение. Как? PHP и вывод значений из базы данных как оформить красиво |
|
1341 / 920 / 265
Регистрация: 08.08.2014
Сообщений: 2,775
|
|||
| 26.07.2022, 16:05 | |||
|
Потому как вернётесь вы к этому коду через месяц-другой и придётся тратить время, дабы понять что вы там имели ввиду, и почему в коллекции 'Images' всегда только одно изображение, когда в базе их 12. Добавлено через 7 минут Плюс, если в API потребуются (мне всегда требуются) какие-то методы, которые оперируют ограниченными/объединёнными наборами данных, то рядом всё равно вырастет слой DTO. И приложение станет более запутанным, т.к. часть API будет привязана к БД, а часть не будет. P.S.: вероятно, в каких-то случаях такая модель и применима, но я с подобным на практике не сталкивался.
0
|
|||
|
3 / 3 / 0
Регистрация: 07.11.2018
Сообщений: 119
|
||||||
| 26.07.2022, 16:12 [ТС] | ||||||
|
Andrey-MSK, хмм
0
|
||||||
|
|
|
| 26.07.2022, 16:17 | |
|
kotelok, Не, то что описывает БД - это описание можно использовать везде где требуются именно эти наборы. Для индивидуальных наборов, можно там же, в DAL, создать свои классы и использовать их так же по всему приложению. Ведь, как пример, для обработки данных в VM, вы всё равно создаёте индивидуальные свойства и поля класса, которые взаимодействуют с классами данных. Так что практически во всех случаях, если приложение работает с БД, то вся БЛ модели находится в БД, а приложение это просто показать, отредактировать и записать назад. Никаких сложных преобразований и расчётов оно практически никогда не выполняет... С этим гораздо быстрее справится сервер SQL, или сервер приложений, чем калькулятор у клиента...
0
|
|
|
14807 / 9580 / 1368
Регистрация: 21.01.2016
Сообщений: 36,088
|
|||
| 26.07.2022, 17:58 | |||
Неконсистеность. В том плане, что сущности не будут содержать полный граф зависимостей, кроме тривиальных случаев. Т.е. вам либо придётся на ВСЕ возможные навигационные свойства вызывать Include, либо уповать на Lazy Loading. Первое приведёт к генерации запроса на выгребание всей базы (граф зависимостей, особенно со стороны статических справочников, может покрывать ВСЁ хранилище) с соответствующим вылетом. Второе - к лютым тормозам и расходам памяти на раздутый кеш контекста.Что вы с этим будете делать? Правильно, явно выгружать только какие-то отдельные свойства. Получается, что ваши сущности не будут содержать всех данных, о которых их контракт заявляет. А там поди угадай почему коллекция заказов у юзера пустая. Толи нет заказов, толи забыли Include указать. Просто простор для багов. Неприменимость. Вам может понадобиться запросить из базы то, что в сущности отсутствует. Более того: оно даже не относится к сущности. О чём тут ТС и спросил. Начинать в сущность пихать разные игнорируемые свойства? Запашком не отдаёт?Производительность. На практике, любой бизнес-процесс требует только подмножество полей любой таблицы или JOIN'а таблиц. Выгребая всё подряд, вы рискуете запросить и "тяжёлые" поля. Типа NVARCHAR(MAX), BLOB или какие-то вычисляемые поля. А это и доступ к данным на уровне базы и пересылка по сети, и материализация на клиенте. Вы когда на чистом SQL запросы пишете, тоже всегда делаете SELECT *? Как, классно работает?)Правильный подход тут только один - проекции. Сущности EF'а - только схема базы данных. Не DTO для реального выгребания данных.
1
|
|||
|
403 / 265 / 69
Регистрация: 12.04.2020
Сообщений: 1,404
|
|
| 26.07.2022, 18:18 | |
|
а что мешает подрубить дапер и написать простой запрос в базу, и вернуть результат какой хотите?
0
|
|
|
14807 / 9580 / 1368
Регистрация: 21.01.2016
Сообщений: 36,088
|
|
| 27.07.2022, 03:50 | |
|
Dr9vik, человек учится использовать EF...
1
|
|
|
403 / 265 / 69
Регистрация: 12.04.2020
Сообщений: 1,404
|
||
| 27.07.2022, 13:12 | ||
|
попытка сделать то что хочет автор через Linq - извращение
0
|
||
|
|
|
| 27.07.2022, 14:09 | |
|
0
|
|
|
403 / 265 / 69
Регистрация: 12.04.2020
Сообщений: 1,404
|
||
| 27.07.2022, 14:27 | ||
|
автор хочет узнать количество Linq просто так не даст эту возможность смысл страдать? темболее если взять тот же postgres, то оверхед написать просто Count, придётся писать костыли...
0
|
||
|
|
|
| 27.07.2022, 14:40 | |
|
Nuril,
Можно просто написать SP и отразить её на класс EF, что, кстати, будет гораздо проще и быстрее работать, чем огород из LINQ.
0
|
|
|
14807 / 9580 / 1368
Регистрация: 21.01.2016
Сообщений: 36,088
|
|
| 28.07.2022, 17:59 | |
|
0
|
|
| 28.07.2022, 17:59 | |
|
Как получить DataTable из двух связанных таблиц? Как, используя рефлексию, получить перечень событий, связанных с той же кнопкой?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет!
За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|