Как считать связанные объекты, не выбирая их в Entity Framework
Я уже давно об этом задумываюсь, поэтому я подумал, что стоило бы использовать мой первый пост с переполнением стека, чтобы спросить об этом.
Представьте, что у меня есть обсуждение со связанным списком сообщений:
DiscussionCategory discussionCategory = _repository.GetDiscussionCategory(id);
обсуждениеКатегория. Дискуссия - это список объектов обсуждения, который в данный момент не загружен.
То, что я хочу, - это иметь возможность перебирать обсуждения в разделе Обсуждение и говорить, сколько сообщений в каждом обсуждении, не выбирая данные сообщения.
Когда я попробовал это раньше, мне пришлось загрузить Обсуждения и Сообщения, чтобы я мог сделать что-то вроде этого:
discussionCategory.Discussions.Attach(Model.Discussions.CreateSourceQuery().Include("Messages").AsEnumerable());
foreach(Discussion discussion in discussionCategory.Discussions)
{
int messageCount = discussion.Messages.Count;
Console.WriteLine(messageCount);
}
Это кажется мне довольно неэффективным, поскольку я извлекаю из базы данных потенциально сотни тел сообщений и храню их в памяти, когда все, что я хочу сделать, - это подсчитать их количество для презентационных целей.
Я видел некоторые вопросы, которые касаются этой темы, но они, кажется, не обращались к ней напрямую.
Заранее благодарим вас за любые мысли на эту тему.
Обновление - еще немного кода по запросу:
public ActionResult Details(int id)
{
Project project = _repository.GetProject(id);
return View(project);
}
Затем в представлении (просто чтобы проверить это):
Model.Discussions.Load();
var items = from d in Model.Discussions select new { Id = d.Id, Name = d.Name, MessageCount = d.Messages.Count() };
foreach (var item in items) {
//etc
Надеюсь, это прояснит мою проблему. Дайте мне знать, если вам нужно больше деталей кода.