2012-01-27 2 views
0

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

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

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

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

ответ

0

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

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

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

context.Principals.MergeOption = MergeOption.OverwriteChanges; 
context.Dependents.MergeOption = MergeOption.OverwriteChanges; 
principals = context.Principals.Include("Dependents").ToList(); 
Смежные вопросы