|
0 / 0 / 0
Регистрация: 11.07.2020
Сообщений: 6
|
||||||
.NET Core Вывести в DataGrid выборку из нескольких таблиц24.08.2021, 20:00. Показов 7472. Ответов 8
Здравствуйте.
Ситуация следующая. Используя Entity Framework Core методом CodeFirst создал базу данных с отношением многие ко многим. Получилось три таблицы, например: Students, Courses и CourseStudent. Делал запросы в Microsoft SQL Server на объединение таблиц. Все замечательно, все работает. Но каким образом я могу объединить таблицы и вывести их в элемент WPF DataGrid? Примерно вот так: Программирование Иванов Программирование Петров Программирование Сидоров Алгоритмитизация Зуброва Алгоритмитизация Пушкин Пробовал применят LINQ to Entities и так и сяк. Ничего не получается. Это классы для примера с сайта Метанит. На основании них создавалась база данных:
0
|
||||||
| 24.08.2021, 20:00 | |
|
Ответы с готовыми решениями:
8
Как осуществить выборку из нескольких таблиц а затем вывести это в MS Word Запрос на выборку из нескольких таблиц Запрос на выборку из нескольких таблиц |
|
2810 / 1679 / 885
Регистрация: 14.04.2015
Сообщений: 5,723
|
|
| 24.08.2021, 22:35 | |
|
Caveman, https://metanit.com/sharp/entityframework/4.4.php
https://stackoverflow.com/ques... in-winform
0
|
|
|
0 / 0 / 0
Регистрация: 11.07.2020
Сообщений: 6
|
|
| 25.08.2021, 19:13 [ТС] | |
|
AndreyVorobey,
Что касается того что по первой ссылке. Это уже пробовал много раз в различных вариациях. Я не могу вывести то что получается в WPF DataGrid. Тем более у меня нет классов промежуточных таблиц, я не могу обращаться к ним при объединении. То что по второй ссылке, не совсем понимаю к чему это. Еще хочу сказать, что облазил весь интернет и не нашел ответа. На этот форум обращаюсь как в последнюю инстанцию.
0
|
|
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
|
| 25.08.2021, 22:22 | |
|
Caveman, Первая ссылка про то, как писать выборку из нескольких таблиц Linq.
Вторая о том, как подключать результаты выборок, которых нет в контексте EF Все, что Вам было нужно, это осмыслить текст и применить его. 1. Написать собственно запрос, возвращающий то, что нужно 2. По результатам запроса написать класс MyClass 3. Написать код linq "под запрос", завернув полученный результат в List<MyClass> 4. Привязать грид к полученному листу. При этом если нужно будет редактировать данные в гриде, позаботиться о том, чтобы переопределить методы для Insert/Update/Delete Добавлено через 10 минут По поводу приведенного Вами кода, якобы с метанита. У вас в нем все в куче: контекст и классы модели. Возможно, в новомодном EF Core так принято, но правильно разделять их по разным юнитам. Контекст - свой класс и юнит, для каждой модели - свой класс и юнит. А все это в папке .edmx в папке Models. Вот в эту же папку Models (но не .edmx) нужно добавлять классы расширения, которых нет в контексте (так как в БД нет самих сущностей). Кроме того, рядом нужно создать один один класс - Repository, в котором будет код для манипуляции с Хранилищем (БД). Repository, как и классы расширения, в совокупности с моделями и контекстом EF, будут Вашим ORM, которым и будет пользоваться код Вашего приложения. Для решения сабжевой задачи как раз и нужен метод репозитория и класс расширения, причем код самого репозитория будет юзать модели и контекст EF. Добавлено через 12 минут Поймите одну простую вещь: EF работает с сущностями базы данных: таблицами, ограничениями, View, UDF, SP и т.д. То, что есть в базе, он интерпретирует (отображает) на Модель. Но то, чего там нет, например произвольных запросов, он просто не видит и видеть не может. Если Вам потребовался запрос из двух или более таблиц, например, для отображения в сетке, Вы должны либо написать View/UDF/SP на сервере и включить ее в Модель (как класс и метод контекста) посредством самого EF, либо ручками написать класс и метод репозитория. С точки зрения грида они будут абсолютно "равноправными". Правда, тут есть нюанс, касающийся редактирования в гриде. Полагаю, что Вы сами разберетесь что там к чему.
0
|
|
|
0 / 0 / 0
Регистрация: 11.07.2020
Сообщений: 6
|
|||||||||||
| 26.08.2021, 21:04 [ТС] | |||||||||||
|
Я, честно говоря, уже не первую неделю над этим бьюсь.
Давайте я попробую еще раз. 1. Создаю классы и контекст, как в первом сообщении. 2. Пробую для примера вывести студентов с их Id в DataGrid.
Пробовал создавать дополнительные классы. Ну, не знаю. Делаю что-то не так, что - понять не могу.
0
|
|||||||||||
|
2810 / 1679 / 885
Регистрация: 14.04.2015
Сообщений: 5,723
|
|
| 26.08.2021, 23:00 | |
|
Caveman, а напомни, чем первый вариант с применением sql хуже, учитывая, что ты не шаришь в linq.
Во втором случае у тебя отложенное выполнение запроса, пропиши ToList() в конце, как в первом варианте.
0
|
|
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
|||||||||||
| 27.08.2021, 00:38 | |||||||||||
|
Простой пример:
Небольшие пояснения к коду. Класс модели может не соответствовать результатам выборки не только по именам полей, ни и их количеству и даже типам данных. Нужное соответствие устанавливается кодом обработки записей ридера. В примере соответствия нет только по именам (кстати, алиасы выходных полей-колонок в самом запросе можно убрать т.к. в ридере используется индексатор) Функция запускает запрос на сервер, после чего полученный набор данных "упаковывает" (мапирует) в список моделей, который в нужном месте кода кладется в грид. Грид просто отображает содержимое этого списка. Важно. Для того, чтобы данные можно было редактировать непосредственно в гриде, код следует "обогатить", добавив в модель айдишники классов животных и сфер обитания, которые будут использоваться при добавлении/изменении записей животных. Ну и еще кое-что сделать ![]() Добавлено через 8 минут Код функции можно переписать с ADO.NET на linq, но в этом случае модель либо должна строго соответствовать возвращаемому НД (имена поле и типы данных, а также их число), либо придется написать переименования и приведения к типу полей модели в самом linq, где такая возможность имеется).
0
|
|||||||||||
|
0 / 0 / 0
Регистрация: 11.07.2020
Сообщений: 6
|
||||||||||||||
| 30.08.2021, 20:06 [ТС] | ||||||||||||||
Добавлено через 10 минут MsGuns, Э... Я задал вопрос в разделе ADO.Net потому что не был уверен к какой теме вопрос отнести. Я хочу именно в EF Core либо через Linq либо через запросы SQL вывести результат в dataGrid.
0
|
||||||||||||||
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
|
| 30.08.2021, 21:35 | |
|
0
|
|
| 30.08.2021, 21:35 | |
|
Помогаю со студенческими работами здесь
9
Запрос на выборку из нескольких таблиц Запросы на выборку с нескольких таблиц Запрос на выборку из нескольких таблиц Сложный запрос на выборку из нескольких таблиц Как сделать выборку из нескольких таблиц? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
|
Оттенки серого
Argus19 18.03.2026
Оттенки серого
Нашёл в интернете 3 прекрасных модуля:
Модуль класса открытия диалога открытия/ сохранения файла на Win32 API;
Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
|
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-rectangles-sdl3-c. zip
finish-rectangles-sdl3-cpp. zip
|
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие.
Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
|
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|