Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 13.12.2018
Сообщений: 7

Доступ к данным таблицы сформированным автоматически Code First

23.04.2021, 09:30. Показов 1817. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую. Нужна светлая мысль, сам понять не могу) Проблема следующая: у меня WPF проект, в котором я работаю с БД через Entity Framework. Есть таблица работников и таблица городов. Связь типа многие-ко-многим, т.е. каждый работник может иметь доступ к нескольким городам и к каждому городу может быть привязано несколько работников.

Применяется подход Code First - соответственно сформировалась таблица работников (Employees), таблица городов (CityOfPresences) и (АВТОМАТИЧЕСКИ) сформировалась третья таблица для связи (EmployeeCityOfPresences). Так вот: я могу получать данные из первых двух таблиц, но никак не могу понять как получить доступ к данным таблицы EmployeeCityOfPresences.

Код класса Employee
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Employee
    {
        string passwordEncrypted = "";
        public int EmployeeId { get; set; }
        public string Surname { get; set; }
        public string Name { get; set; }
        public string Patronymic { get; set; }
        public string Post { get; set; }
        public string Phone { get; set; }
        public string Login { get; set; }
        public string Password { get; set; }
        public bool FirstEntry { get; set; }
 
        //Создание связи типа многие ко многим с таблицей городов присутствия.
        public ICollection<CityOfPresence> CitiesOfPresence { get; set; }
    }
Код класса CityOfPresence
C#
1
2
3
4
5
6
7
8
9
10
11
class CityOfPresence
    {
        public int CityOfPresenceId { get; set; }
        public string Name { get; set; }
        //создание связи типа многие ко многим:
        public ICollection<Employee> Employees { get; set; }
        public CityOfPresence()
        {
            Employees = new List<Employee>();
        }
    }
Код класса контекста
C#
1
2
3
4
5
6
7
class UserContext : DbContext   //наследуем от класса System.Data.Entity.DbContext
    {
        public UserContext() : base("DbConnection") { }
 
        public DbSet<CityOfPresence> CitiesOfPresence { get; set; }
        public DbSet<Employee> Employees { get; set; }
    }
Решение наверняка простое), но понять никак не могу. Буду очень признателен за помощь!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.04.2021, 09:30
Ответы с готовыми решениями:

Получить доступ к данным выделенной строки таблицы listView
Создаю таблицу в listView следующим образом: DataTable table = new DataTable(); //заполнение таблицы данными table =...

Как массово присвоить CODE одной таблицы к CODE другой таблицы в Mysql, если связь — NAME?
Пробовал : UPDATE `nested_table` SET nested_table.CODE = t_product.`CODE` WHERE nested_table.`NAME` = t_product.`NAME` Ловлю...

ASP&Доступ в другой домен выдает сообщение 'Разрешить странице доступ к данным в другом домене'.
Люди, помогоите... Такая проблема - написан клиентский скрипт, запускаю с Web-узла выдает сообщение 'Разрешить странице доступ к...

8
1341 / 920 / 265
Регистрация: 08.08.2014
Сообщений: 2,766
23.04.2021, 09:46
Явно добавить в проект класс для 'EmployeeCityOfPresences', связать две ваши сущности через него и добавить в контекст DbSet для него.
0
 Аватар для Рядовой
1524 / 914 / 329
Регистрация: 17.05.2015
Сообщений: 3,438
23.04.2021, 09:50
А еще лучше вручную редактировать схему бд, а классы обновлять по команде dbcontext scaffold
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
23.04.2021, 12:12
Не знаю, как в CodeFitst, не работаю с ним, но где у Вас счетчики в двух основных таблицах ?
Для многие-ко-многим нужна новая перекрестная таблица, как Вы правильно заметили. Она должна состоять минимум из 3 полей : Id самой записи - связки, Id работника и Id города.

Очевидно, что сама эта сущность нужна лишь для правки, но не для отображения.
Чтобы получать списки для сеток, Вам нужен запрос с джоинами типа такого:
SQL
1
2
3
SELECT c.name, e.fio, e.surname, t.phone FROM CROSS t  
  LEFT JOIN city c ON t.idc = c.id 
  LEFT JOIN emploee e ON t.ide=e.id
Такого класса у Вас в контексте нет, т.к. нет в БД самого запроса (UDF). Но его можно добавить в модель (но не в папку .edmx), а также добавить туда же статический класс Repository, написать для него метод, в котором реализовать LINQ указанный выше запрос, результат которого отобразить на List<T>, который и возвращать. Именно к этому методу Вы и будете обращаться, например, для получения датасета в гриде.
0
0 / 0 / 0
Регистрация: 13.12.2018
Сообщений: 7
30.04.2021, 18:04  [ТС]
Спасибо всем за ответы. Ход мысли понял. И всё даже заработало) Но в процессе изучения нового возникла беда - через обозреватель объектов SQL Server в Visual Studio удалил ненужную таблицу. Но при работе программы экземпляр моего контекста ссылается на неё. Перелопатил весь код так и не понял откуда идёт обращение... Глупый конечно вопрос, но все же куда смотреть? Заранее благодарю!
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
30.04.2021, 23:47
Если Вы используете EF Code First, то нельзя делать любые правки в БД помимо EF. Если все же такое произошло, поднимите БД из бэкапа, а проект из архива. Если же нет ни того, ни другого, то ищите "синие" строки в коде и удаляйте их и все, что с ними связано. А лучше - создайте проект заново - это научит Вас не "махать шашкой"
1
Эксперт .NET
 Аватар для Usaga
14135 / 9355 / 1350
Регистрация: 21.01.2016
Сообщений: 35,153
01.05.2021, 04:07
Цитата Сообщение от MsGuns Посмотреть сообщение
Если Вы используете EF Code First, то нельзя делать любые правки в БД помимо EF.
На самом деле можно. Нельзя применять миграции, ибо EF удивится тому, что схема не такая, какую он ожидает увидеть при миграции.
0
0 / 0 / 0
Регистрация: 13.12.2018
Сообщений: 7
01.05.2021, 15:20  [ТС]
По поводу "шашку в сторону" я понял(

Но неужели нет какого-то способа очистить контекст? С EF знаком слабовато, вопросы возможно задаю наивные, но могу опереться только на Ваши ответы.

Где я рассуждаю неправильно?:
1. при запуске программы формируется новый экземпляр моего контекста
2. раз он ссылается на удаленную таблицу, значит при формировании данного экземпляра используются где-то ранее сохраненные данные
3. Их надо подкорректировать и проблема будет решена

Или это так не работает?) Спасибо!
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
02.05.2021, 00:00
Цитата Сообщение от Ruslan575 Посмотреть сообщение
Но неужели нет какого-то способа очистить контекст?
Есть. Удалить папку .edmx, предварительно сохранив ее в папке вне проекта. Создать модель по-новой. Копипастой аккуратно перенести код из сохраненной папки в созданные заново пустые классы Модели. То же самое с контекстом.
Цитата Сообщение от Ruslan575 Посмотреть сообщение
1. при запуске программы формируется новый экземпляр моего контекста
Если Вы его нигде явно не создаете (например, в событии Load Главной формы), то сам-по себе он не создастся.
Цитата Сообщение от Ruslan575 Посмотреть сообщение
2. раз он ссылается на удаленную таблицу, значит при формировании данного экземпляра используются где-то ранее сохраненные данные
Что такое "удаленная" таблица ? При запуске опять же никакие экземпляры классов Модели не создаются автоматически. Все надо создавать кодом явно. Что такое "ранее сохраненные данные" ? Если речь о метаданных, то да, в БД на SQL-сервере таблицы остаются при условии, что при запуске у Вас был определен соответствующий метод контекста и он сработал.
Что же касается контента БД (содержимое таблиц, т.е. данные), опять же смотрите на миграцию, как она указана и была ли включена при создании контекста.
Цитата Сообщение от Ruslan575 Посмотреть сообщение
3. Их надо подкорректировать и проблема будет решена
Что подкорректировать и какая проблема будет решена ? В свете вышесказанного у Вас может быть несколько проблем (проекция новой модели на метаданные БД, миграция как мета, так и данных таблиц и пр).
Если Вы имеете в виду, что в результате Вашей "шашки" исчезли некоторые определенные в Модели сущности, и надо это исправить, то Вам сказано, как это делать. Но это может быть сложнее, чем создать Модель и контекст заново.

Добавлено через 5 минут
Общий совет: если для Вас критична скорость написания и отладки проекта, То создайте нужную базу в SSMS, там же заполните ее отладочными данными. После чего накатите готовую базу на EF - получите готовый контекст и классы Модели.
Далее все просто суете куда надо и все заработает.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.05.2021, 00:00
Помогаю со студенческими работами здесь

Есть ли возможность контролировать доступ флэшкам у которых есть доступ к данным через Security.allowDomain()
Есть задача: Локальная флэшка на компьютере работает и доступа для правки к ней не имею . Любая флэшка запущенная в браузере, с...

Разложить данные одной таблицы по данным другой таблицы, не связанных напрямую
Доброго времени суток. Задача: имеется БД со следующей структурой Необходимо разложить каждый прием пищи(таблица Meals) по...

Создание отчета по данным, Нужны хотя бы идеи как формировать автоматически :)
Добрый день, уважаемые форумчане! Столкнулся с проблемой - аксес экспортирует экселевскую таблицу формата Укрупненная статья -...

Как автоматически сформировать все таблицы из t1, по найденным значениям из таблицы t2
Добрый день, нужна помощь! В архиве Пример.rar (http://zalil.ru/32567045) база db1 и два текстовых файла, файл 131313.txt создан...

Вывод данных из таблицы по данным из другой таблицы
Здравствуйте Использую БД-Access+ADO Имеется БД с несколькими таблицами(Контрагенты,Договора,Лицензии,Сертификаты) Лицензии и...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru