Как к предприятиям, связанным с графами, не забирая их в структуре предприятия

Я задавался вопросом об этом некоторое время теперь, таким образом, я думал, что будет стоить использовать мой первый пост Переполнения Стека, чтобы спросить об этом.

Предположите, что у меня есть обсуждение со связанным списком сообщений:

DiscussionCategory discussionCategory = _repository.GetDiscussionCategory(id);

discussionCategory. Обсуждения - список предприятий Обсуждения, который в настоящее время не загружен.

То, что я хочу, должно быть в состоянии повторить посредством обсуждений в discussionCategory и сказать, сколько сообщений находится в каждом обсуждении, не принося данные о сообщении.

Когда я попробовал это, прежде чем я должен был загрузить Обсуждения и сообщения так, чтобы я мог сделать что-то вроде этого:

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

Я надеюсь, что это делает мою проблему немного более ясной. Сообщите мне, должны ли Вы еще закодировать детали.

43
задан Oligarchia 6 January 2010 в 15:13
поделиться

2 ответа

[

]Легко; просто спроецируйте на POCO (или анонимный) тип:[

] [
var q = from d in Model.Discussions
        select new DiscussionPresentation
        {
            Subject = d.Subject,
            MessageCount = d.Messages.Count(),
        };
] [

]Когда вы посмотрите на сгенерированный SQL, вы увидите, что []Count()[] выполняется сервером БД.[

] [

]Обратите внимание, что это работает как в EF 1, так и в EF 4.[

].
39
ответ дан 26 November 2019 в 23:04
поделиться

У меня нет прямого ответа, но могу лишь указать вам на следующее сравнение между NHibernate и EF 4.0, которое, кажется, предполагает, что даже в EF 4.0 нет готовой поддержки для получение счетчиков связанной коллекции сущностей без извлечения коллекции.

http://ayende.com/Blog/archive/2010/01/05/nhibernate-vs.-entity-framework-4.0.aspx

Я проголосовал за ваш вопрос и пометил его звездочкой. Надеюсь, кто-нибудь найдет работоспособное решение.

0
ответ дан 26 November 2019 в 23:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: