Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
 Аватар для bodynar
345 / 307 / 135
Регистрация: 14.03.2015
Сообщений: 1,158
Записей в блоге: 1

Обновление связанных сущностей (каскадное обновление)

20.11.2016, 15:51. Показов 3788. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток.

У меня возникла проблема с обновлением сущности и связанной с ней сущности.

Подход к созданию бд - codefirst

Мои модели
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 public class Employee
    {
        public int Id { get; set; }
        public virtual ManInfo ManInfo { get; set; }
        public string Post { get; set; }
    }
    public class ManInfo
    {
        public int Id { get; set; }
        public string FirstName { get; set; }
        public string MiddleName { get; set; }
        public string SecondName { get; set; }
        public DateTime BirthDay { get; set; }
    }


В ходе работы желаю произвести изменение сущности Employee (включая и ManInfo).

C#
1
var m = Mapper.Map<Employee>(model);
Таким образом у меня получается сущность со всеми измененными свойствами (id присутствует как и у employee, так и у подмодели ManInfo)

Далее совершаю такое
C#
1
db.Entry(m).State = EntityState.Modified;
В результате получаю изменение сущности Employee (все изменилось), но у связанной сущности ManInfo изменения не происходят.

Пробовал такой способ
C#
1
2
var n = db.ManInfos.First(x => x.Id == mId);
db.Entry(n).State = EntityState.Modified;
Но результатов не дал.

Прошу помощи у вас - как правильно обновить сущность и связанную с ней сущность (подмодель)?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.11.2016, 15:51
Ответы с готовыми решениями:

Каскадное обновление данных C#
try { cn.Open(); cmd.Connection = cn; string s = &quot;alter table two2 add...

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

Обновление элементов управления связанных с бд
Такой вопрос. Есть datagridview при добавлении новой строки она добавляется и в базу данных, но при этом на другой форме есть combobox...

8
Эксперт .NET
 Аватар для Usaga
14087 / 9305 / 1348
Регистрация: 21.01.2016
Сообщений: 34,944
20.11.2016, 17:16
bodynar, никогда не трогай State сущности. Это свойство - только для мониторинга. Где ты такое решение увидел? Не заходи на тот сайт больше. Просто меняй свойства сущности, а потом вызывай метод SaveChanges() у контекста.
0
 Аватар для bodynar
345 / 307 / 135
Регистрация: 14.03.2015
Сообщений: 1,158
Записей в блоге: 1
20.11.2016, 17:34  [ТС]
Usaga, изменение State сущности прописала студия по шаблону, когда создавал контроллер типизированный.

Хорошо, спасибо, сейчас попробую.

А если сущность получена путем мэппинга, но имеет id, который находится в бд, то изменение произойдет правильно?
0
Эксперт .NET
 Аватар для Usaga
14087 / 9305 / 1348
Регистрация: 21.01.2016
Сообщений: 34,944
20.11.2016, 17:42
bodynar, да
1
 Аватар для bodynar
345 / 307 / 135
Регистрация: 14.03.2015
Сообщений: 1,158
Записей в блоге: 1
20.11.2016, 17:44  [ТС]
Хм, возможно я что-то делаю не так.
C#
1
2
3
4
var m = Mapper.Map<Employee>(model);
            var origin = db.Employees.First(x => x.Id == m.Id);
            origin = m;
            db.SaveChanges();
не работает.
Как и другие вариации (без origin).

У меня такая логика:
Get-запрос -> отправка клиенту EmployeeViewModel, которая получается путем мэппинга из Employee ->
Редактирование на вьюхе -> Post-запрос -> получение Employee из отправленной клиентом EmployeeViewModel.
И необходимо изменить данные у сущности Employee.
0
Эксперт .NET
 Аватар для Usaga
14087 / 9305 / 1348
Регистрация: 21.01.2016
Сообщений: 34,944
20.11.2016, 17:50
bodynar, в это коде ты просто меняешь ссылку, а не содержимое объекта на который она ссылается.
0
 Аватар для bodynar
345 / 307 / 135
Регистрация: 14.03.2015
Сообщений: 1,158
Записей в блоге: 1
20.11.2016, 18:04  [ТС]
Usaga, хм, а есть ли возможность в меньшее число строк обновить сущность?

Изначально у меня было простое
C#
1
origin.Age = model.Age
и таких строк 10 аналогичных. Мэппером все собралось в одну строку, но
Цитата Сообщение от Usaga Посмотреть сообщение
просто меняешь ссылку
0
Эксперт .NET
 Аватар для Usaga
14087 / 9305 / 1348
Регистрация: 21.01.2016
Сообщений: 34,944
20.11.2016, 18:28
Лучший ответ Сообщение было отмечено bodynar как решение

Решение

bodynar, тот же Automapper умеет не только создавать новую сущность, но и задавать свойства у уже существующей. Посмотри в документации или перегрузки через IntellySense.
1
 Аватар для bodynar
345 / 307 / 135
Регистрация: 14.03.2015
Сообщений: 1,158
Записей в блоге: 1
20.11.2016, 18:57  [ТС]
Usaga, Большое спасибо за наводку.
Решение проще некуда. Нужно более явно указать, воспользовавшись перегрузкой.
C#
1
Mapper.Map<EmployeeViewModel, Employee>(model, origin);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.11.2016, 18:57
Помогаю со студенческими работами здесь

Обновление связанных таблиц в datagridview
Есть кнопка на вывод информации: SqlConnection con; SqlDataAdapter sda; SqlCommandBuilder scb; ...

Обновление связанных таблиц в DataGridView
Всем привет. Возник такой вопрос: как можно обновить связанную таблицу при программной сортировке главной? Я сортирую результаты главной...

Каскадное обновление связанных таблиц
Такое ощущение, что решение должно существовать. Есть необходимость изменить значение внешнего ключа. Естественно оракул ругается. ...

Каскадное обновление таблиц
Всем привет! Народ, помогите, не могу правильно составить SQL-запрос. Вот задача: Есть таблицы: «Заявки» с полями («Код заявки»...

Каскадное обновление записей
Помогите, пожалуйста, создать триггер на каскадное обновление записей. create trigger upDw for flat active before update ...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru