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

EF и обновление навигационного свойства

23.10.2018, 18:19. Показов 919. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть 2 таблицы в БД: Автор и Книги. Я в приложении на WPF с подходом DB-First отображаю информацию о конкретном авторе и в гриде вывожу список его книг. Благодаря EF могу без лишних телодвижений сохранять изменения в БД, сделанные в окне (форме), или отменять их. Для грида ItemSource - это myObj.Books - так как Книги по связи из БД у меня отобразились как список, точнее как
C#
1
ICollection<Books> Books { get; set; }
Вот так я заполняю модель данных:
C#
1
2
3
4
5
var cnt = new Entities();
var myObj = cnt.Authors.FirstOrDefault(x => x.ID == 5);
var vm = new ViewModel(myObj);
var window = new MyWindow(vm);
window.ShowDialog();
После отображения окна я или сам делаю обычный Insert T-SQL или знаю, что другой пользователь записал в БД книгу этого же автора и хочу по кнопке "Обновить" заново считать список книг данного автора средствами EF и сделать UpdateProperty, чтобы в гриде уже были все значения. Как заново считать значения Books?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.10.2018, 18:19
Ответы с готовыми решениями:

Вывести во View значение из навигационного свойства
Проблема такая, хочу вывести страну для производителя, код прикладываю: Производитель using System; using...

Как передать в модель значение навигационного свойства?
Привет! Вот такая модель Это фразы и варианты их использования. Класс, который представляет фразу: public partial...

WxPython. wx.propgrid. Обновление метки свойства
Есть сетка свойств self.pg = wxpg.PropertyGrid(self, size=(500, 600), style=wxpg.PG_SPLITTER_AUTO_CENTER|wxpg.PG_TOOLBAR) На этой сетке...

4
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
24.10.2018, 01:10
Цитата Сообщение от Qwe1 Посмотреть сообщение
Как заново считать значения Books?
Создайте контекст, прицепите к нему сущность и загрузите коллекцию:
C#
1
2
3
4
using (var cnt = new Entities())
{
   cnt.Entry(myObj).Collection(m => m.Books).Load();
}
0
2 / 2 / 2
Регистрация: 18.08.2011
Сообщений: 51
24.10.2018, 16:38  [ТС]
Я контекст передаю во ViewModel. "Сохранить", "Отменить" как раз его используют. Предложенный вами способ работает - я использую все тот же переданный контекст и условно говоря по кнопке "Обновить" выполняю Load. Добавленные кем-то извне строки появляются, но вот удаленные - нет. Не знаете, почему?
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
25.10.2018, 17:31
Цитата Сообщение от Qwe1 Посмотреть сообщение
Добавленные кем-то извне строки появляются, но вот удаленные - нет.
Если изменения производились без контекста или если отслеживание изменений в контексте отключено, то новый контекст ничего не знает об удаленных элементах — он не производит полную сверку с базой.
При работе с временным контекстом эти вещи приходится отслеживать самостоятельно.
0
2 / 2 / 2
Регистрация: 18.08.2011
Сообщений: 51
25.10.2018, 18:15  [ТС]
Упрощенно говоря, у меня один пользователь считал данные с помощью EF и единственного контекста, отслеживания изменений не выключались. Он сидит и смотрит на форму и видит данные. После этого второй пользователь вручную в БД добавил пару строк и удалил одну и говорит первому - обновляй! Мне надо обновить часть информации у первого пользователя, то есть по сути считать заново данные по навигационному свойству. Предложенный способ с Load, выходит, в данном случае не подходит? Если он закроет окно, заново его откроет, то есть снова выполнится "var myObj = cnt.Authors.FirstOrDefault(x => x.ID == 5);", то все будет считано, но может есть способ обойтись без полного считывания?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.10.2018, 18:15
Помогаю со студенческими работами здесь

Обновление ObservableCollection при изменение свойства элемента
Забиндил ItemsSource в DataGrid на ObservableCollection&lt;T&gt;, но почему-то данные в DataGrid изменяются только при добавление или удаление...

Добавление нового и/или обновление существующего свойства объекта
function updateOne(db, collection, _id, service, phase, status) { let query = {_id: _id}; let values = { $set:...

Обновление связанного с TextBox свойства в момент набора текста
Добрый день. Хочу, чтоб моя программа удовлетворяла требованиям MVVM, в частности, чтобы Вью ничего не знало про Бехайнд-код. У меня есть...

Расположение навигационного блока
Добрый времени суток! Столкнулся с проблемой центрирования nav-блока. Никаким образом не хочет вставать по центру страницы (имеется...

Оптимизация навигационного меню
Всем привет, нужна помощь начинающему с навигационным меню :) На скриншоте то, что хочу реализовать. Структура html-кода для этого меню...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
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 и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru