Umbraco 8 - Получение дочерних узлов узла с помощью метода ContentAtXPath () - PullRequest
0 голосов
/ 29 мая 2020

Я реорганизовал существующий проект Umbraco, чтобы использовать более производительные запросы при получении данных документа, поскольку все ранее возвращалось с использованием LINQ. Я использовал комбинацию запросов Umbraco через XPaths и Examine.

Сейчас я в тупике, пытаясь получить дочерние документы с помощью метода Umbraco.ContentAtXPath(). Я хотел бы получить дочерний документ на основе пути, который я анализирую к методу. Это то, что у меня сейчас:

IEnumerable<IPublishedContent> umbracoPages = Umbraco.ContentAtXPath("//* [@isDoc]/descendant::/About [@isDoc]");

При выполнении этого возвращается «Ссылка на объект не установлена ​​на экземпляр объекта». ошибка и не могу точно увидеть, где я ошибаюсь (новичок в этой форме запросов в Umbraco).

В идеале я хотел бы улучшить запросы, чтобы также выполнять сортировку с использованием подхода, отличного от LINQ , как показано здесь .

Ответы [ 3 ]

1 голос
/ 01 июня 2020

Это, конечно, зависит от размера вашего набора данных.

Поскольку Umbraco отошла от резервного кеша XML, вам следует изучить запросы Linq в отношении ваших моделей контента. Убедитесь, что вы используете ModelsBuilder для создания моделей.

На небольшом наборе данных Linq будет намного быстрее, чем исследование. На большом наборе данных Examine / Lucene будет более стабильно работать.

1 голос
/ 06 июня 2020

Запросы NuCache в Umbraco 8 выполняются довольно быстро, уступая только поиску Examine. Предполагая, что вы используете Models Builder, а ваша страница «О программе» является дочерней по отношению к домашней странице, вы можете использовать:

var homePage = (HomePage) Model.Root();
var aboutPage = homePage?.Children<AboutPage>().FirstOrDefault();
var umbracoPages = aboutPage.Children();

, где HomePage - это псевдоним типа документа домашней страницы, а AboutPage - ваш страница Псевдоним типа документа.

1 голос
/ 29 мая 2020

Вплоть до Umbraco 8 содержимое кешировалось в файле XML, что делало XPath идеальным вариантом для эффективного запроса содержимого. В v8, однако, так называемый «NuCache» не основан на файлах и не на XML, поэтому поддержка запросов XPath существует только для ... ну ... Я полагаю, ради старых времен? В любом случае это, вероятно, не будет суперэффективным и (я бы посоветовал) не к чему «стремиться». Тем не менее, я, конечно, не знаю, от чего вы меняете (Linq может быть много чего): - /

...