Jak liczyć skojarzone elementy bez pobierania ich w strukturze encji
Zastanawiam się nad tym już od jakiegoś czasu, więc pomyślałem, że warto zapytać o to za pomocą mojego pierwszego posta Przepełnienie stosu.
Wyobraź sobie, że mam dyskusję z powiązaną listą wiadomości:
DiscussionCategory discussionCategory = _repository.GetDiscussionCategory(id);
discussionCategory.Discussions to lista jednostek dyskusyjnych, która nie jest aktualnie załadowana.
Chcę, aby możliwe było przeglądanie dyskusji w kategorii dyskusyjnej i określanie liczby wiadomości w każdej dyskusji bez pobierania danych wiadomości.
Kiedy próbowałem tego zrobić, musiałem wczytać Dyskusje i Wiadomości, abym mógł zrobić coś takiego:
discussionCategory.Discussions.Attach(Model.Discussions.CreateSourceQuery().Include("Messages").AsEnumerable());
foreach(Discussion discussion in discussionCategory.Discussions)
{
int messageCount = discussion.Messages.Count;
Console.WriteLine(messageCount);
}
Wydaje mi się to raczej nieefektywne, ponieważ pobieram potencjalnie setki ciał wiadomości z bazy danych i przechowuję je w pamięci, gdy wszystko, co chcę zrobić, to policzyć ich liczbę dla celów prezentacyjnych.
Widziałem kilka pytań dotyczących tego tematu, ale wydawało się, że nie dotyczą go bezpośrednio.
Z góry dziękuję za wszelkie myśli na ten temat.
Aktualizacja - więcej wymaganego kodu:
public ActionResult Details(int id)
{
Project project = _repository.GetProject(id);
return View(project);
}
Następnie w widoku (aby przetestować):
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
Mam nadzieję, że to sprawi, że mój problem stanie się jaśniejszy. Daj mi znać, jeśli potrzebujesz więcej szczegółów kodu.