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

Entity Framework. Disconnected scenario. Повторное использование объектов-сущностей со связью один-ко-многим

21.04.2017, 09:01. Показов 626. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть две таблицы в базе SQL - Client и Address. В таблице Client есть поле AddressID, которое связано с первичным ключом ID в таблице Address. Всё стандартно.
EntityFramework создаёт классы Client и Address, причём в классе Address создаётся свойство с типом ICollection<Client>.
Теперь суть проблемы: я работаю с disconnected scenario, т.е. сущности попадают в контекст только при сохранении изменений. В классе Client свойство Name обязательно для заполнения.
Внутри метода AddWithState сущности добавляются в контекст на основе их состояния.

C#
1
2
3
4
5
6
7
8
9
10
// Попытка сохранить информацию, когда обязательное свойство не заполнено.
using (IDataContext context = Repository.GetDataContext())
{
     context.AddWithState(addr);
     context.AddWithState(client);
     
     client.Address = addr;
 
     context.Submit(); // Ошибка валидации, т.к. свойство Name не заполнено.
}
Исправляем ошибки. Заполняем все нужные данные и пробуем сохранить еще раз:

C#
1
2
3
4
5
6
7
8
9
10
// Повторное сохранение
using (IDataContext context = Repository.GetDataContext())
{
     context.AddWithState(addr); // Ошибка ограничения внешнего ключа !!!!!!!
     context.AddWithState(client);
     
     client.Address = addr;
 
     context.Submit();
}
Как я выяснил, при добавлении сущностей в контекст Entity Framework автоматически заполняет свойства коллекций, если между сущностями есть связь (что на мой взгляд является undefined behavior), но после уничтожения объекта контекста эти связи остаются, что мешает повторно использовать существующие объекты.
Как избежать подобной проблемы?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.04.2017, 09:01
Ответы с готовыми решениями:

Entity Framework в модель не добавляется таблица со связью многие ко многим
Всем привет. Проблема в следующем, в модель представления данных Entity Framework не могу добавить таблицу со связью многие ко многим....

Entity Framework 6. Code First. Связь один-ко-многим и многие-ко-многим одновременно
Здрасти. Есть таблица юзеров и объявлений. У юзера может быть множество объявлений. Здесь действует связь один-ко-многим. Но юзер также...

Entity Framework связь один-ко-многим
Приветствую! Имеется две модели (со связью один-ко-многим): public class Menu { public int Id { get;...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.04.2017, 09:01
Помогаю со студенческими работами здесь

Entity Framework один ко многим в одной таблице
Добрый день. столкнулся с проблемой. Использую CodeFirst. Нужно сделать связь 1 ко многим к одной и той же таблице. Как сделать что бы...

Entity Framework. Связь между таблицами один ко многим
Здравствуйте. Столкнулся с такой проблемой - у меня есть таблицы Тестов и Вопросов (к тестам), связь один ко многим. Реализация следующая...

Entity Framework. Объединение сущностей
Привет. Начал разбираться с MVC и меня возникла проблема, я создал примитивную базу данных загрузил ее с помощью entity (DataBaseFirst)...

Работа с Entity FrameWork обновление сущностей
Добрый день, у меня есть 2 сущности (работа и люди) со связкой 1 ко многим, есть необходимость менять связь сущности т.е. я хочу изменить у...

Поиск со связью один-ко-многим
В БД есть 2 таблицы: &quot;Клиенты&quot; (№, Фамилия) и &quot;Автомобили&quot; (VIN). Таблицы связаны связью &quot;один-ко-многим&quot; (у одного клиента...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Переходник 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 и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru