#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")
. Вы знаете, почему это так?