У меня есть эта действительно основная структура таблицы:
dbo.tblCategory
dbo.tblQuestion (многие к отношениям к tblCategory)
dbo.tblAnswer (многие к отношениям к tblQuestion)
Так в основном то, что я пытаюсь сделать, - когда я загружаю категорию, я хочу также загрузить все Вопросы и все Ответы.
Теперь, я смог сделать это с помощью следующего кода:
public tblCategory Retrieve(int id)
{
using (var entities = Context)
{
var dto =
(from t in entities.tblCategory.Include("tblQuestion")
.Include("tblQuestion.tblAnswers")
where t.Id == id
select t).FirstOrDefault();
return entities.DetachObjectGraph(dto);
}
}
}
Однако я не абсолютно очарован этим; если отношения называют изменение в моей модели; я не собираюсь получать ошибку при разрабатывании проекта. Идеально, я хотел бы использовать лямбда-выражение; что-то вроде этого:
public tblCategory Retrieve(int id)
{
using (var entities = Context)
{
var dto =
(from t in entities.tblCategory.Include(t => t.tblQuestion)
where t.Id == id
select t).FirstOrDefault();
return entities.DetachObjectGraph(dto);
}
}
Теперь, с вышеупомянутым отрывком; я застреваю о том, как выполнить развертку к таблице Answers. Какая-либо идея о том, что я мог использовать для лямбда-выражения для этого?
Хорошо; Мне удалось заставить это работать с некоторой помощью здесь .
По сути, мне нужно сделать следующее:
public tblCategory Retrieve(int id)
{
using (var entities = Context)
{
var dto =
(from t in entities.tblCategory.Include(t => t.tblQuestion)
.Include(t => t.tblQuestion.First().tblAnswer)
where t.Id == id
select t).FirstOrDefault();
return entities.DetachObjectGraph(dto);
}
}
По приведенной выше ссылке я могу разыменовать tblAnswers только для отдельных элементов коллекции вопросов. Здесь я выбрал разыменование tblAnswers для первого элемента коллекции. На самом деле это лямбда-выражение просто используется для создания пути свойства «tblQuestion.tblAnswers», который будет загружать ответы на все вопросы.
Так что, хотя мне кажется, что я беру только ответы на первый вопрос, я на самом деле беру все ответы на все вопросы.