Обновление включенных свойств навигации с использованием ObjectQuery.Execute - PullRequest
0 голосов
/ 28 января 2012

У меня есть приложение WinForms, которое использует Entity Framework для запроса базы данных.Запрос извлекает все записи из таблицы, а также все записи из связанной таблицы.Я присваиваю результаты родительской таблицы BindingSource и присваиваю ее другому BindingSource для доступа к дочерним записям.Родитель BindingSource связан с ComboBox, а ребенок BindingSource связан с DataGridView.Это все работает, как и ожидалось.

Моя проблема заключается в следующем: в определенный момент мне нужно реализовать функцию обновления, чтобы вытащить все записи из базы данных, чтобы обновить представление.В настоящее время это работает, но обновляет только родительские записи, а не дочерние.

Единственный успех, который я получил при получении желаемого поведения, - это использование ObjectQuery.Execute с использованием опции MergeOption.NoTracking.Это обновляет как родительские, так и дочерние записи, но если я не ошибаюсь, я теряю все отслеживание.

Как я могу также обновить дочерние записи?Я попытался использовать метод Include и указал таблицу дочерних записей, но это не оказало влияния.

1 Ответ

0 голосов
/ 28 января 2012

Лучший вариант - просто создать новый контекст, заново привязать ваши элементы управления и снова выполнить запрос.Обновление сущностей в основном предназначено для решения проблем параллелизма, а не для поддержания долгоживущих контекстов.

Если вы также хотите обновить отношения, вы должны настроить набор сущностей для отношений для поддержки обновления.В настоящее время вы, скорее всего, настраиваете только текущий набор объектов или объектный запрос, который задаст поведение только для основного объекта:

var principals = context.Principals.Include("Dependents").ToList();

context.Principals.MergeOption = MergeOption.OverwriteChanges;
context.Dependents.MergeOption = MergeOption.OverwriteChanges;
principals = context.Principals.Include("Dependents").ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...