Исключение ObjectDisposedException при получении поля внешнего ключа

#entity-framework

#entity-framework

Вопрос:

Я создал свою модель с помощью генератора контекста Db, используя EF 4. Моя модель такая:

Таблица программы: имя идентификатора

Таблица группы: Идентификатор ProgramID (связанный с Program.ID )

Я хочу отобразить эти столбцы в моей сетке:

Программа.Имя — Group.Name

Но grdGroups.Источник данных = db.Groups.ToList()

не возвращает Program.Name

Когда я пытаюсь это сделать, я получаю исключение ObjectDisposedException.

 Partial Public Class Group 
    Public ReadOnly Property ProgramName() As String 
        Get 
            Return Program.Name 
        End Get
    End Property
End Class
  

Каков наилучший способ вернуть программу.Назовите, чтобы включить его в источник данных grid?

Ответ №1:

Когда я пытаюсь это сделать, я получаю исключение ObjectDisposedException

Проблема заключается в отложенной загрузке — EF не материализовал связанную Program сущность, следовательно, при попытке доступа Program.Name он попытается повторно запросить базу данных, но на данный момент контекст был удален, поэтому вы получаете исключение.

Вы можете использовать Include() запрос при получении вашей Group сущности, чтобы указать, что вы также хотите загрузить связанную Program сущность, т.Е. :

 var groups = context.Groups.Include(x => x.Program);
  

Комментарии:

1. Спасибо за совет! grdGroups. Источник данных = db.Groups. Включить («Программа»). ToList () сработал для меня!

2. @BrokenGlass Когда я попытался Include(x => x.Program) , я получил сообщение об ошибке, что он не может преобразовать лямбда-выражение в строку. Вместо этого мне пришлось использовать Include("Program") . Вы знаете, почему это так?