Наилучшая производительность при запросе древовидной структуры с EF4.1 - PullRequest
0 голосов
/ 01 ноября 2011

Это наиболее распространенный вопрос, но я не могу найти хорошего ответа и в Google.

У меня стандартная древовидная структура,

  • Id
  • ParentId
  • Имя
  • ForeignKeyId

Моя первая попытка запроса

    return db.Tree
        .Where(t => t.ForeignKeyId == xxx && t.Parent == null).SingleOrDefault();

Это приведет к выбору N * 2в базу данных.Очень медленный для довольно маленьких деревьев, время ожидания для больших деревьев.

Есть ли какой-нибудь хороший способ ускорить обход деревьев с помощью EF4.1?

edit: этот работает немного лучше

    var eager = db.Tree.Include(t => t.Children).Where(t => t.ForeignKeyIdd == xxx).ToList();

    return eager
        .Where(t.Parent == null).SingleOrDefault();

1 Ответ

0 голосов
/ 02 ноября 2011

Попробуйте это:

return db.Tree
        .Where(t => t.ForeignKeyId == xxx && t.ParentId == null)
        .SingleOrDefault();
...