oData EndPoint: влияет ли это на запрос SQL? - PullRequest
0 голосов
/ 09 февраля 2020

Я использую OData для своего API.

Хотя мне обычно нравится то, что он может предложить, он использует только данные Опубликовать мой запрос, что вынуждает меня заранее построить все отношения .

Передает ли конечная точка oData с EntityFramework мои параметры oData для выполнения до моего SQL запроса?

Прямо сейчас, если я планирую использовать синтаксис oData, такой как $ Expand, мне нужно используйте EF Включить заранее. Еще раз, проблема в том, что EF должен построить все потенциальные отношения, с которыми я могу использовать $ Expand ... даже если я ничего не $ расширяю.

Другой пример, если я должен использовать $ top (100) синтаксис. Скажем, у меня было 10000 результатов, EF загрузит все 10000 из БД, а затем OData выберет Top 100.

Будет ли конечная точка oData внедряться между EF и БД и выбирать только 100 результатов из БД в это дело?

1 Ответ

0 голосов
/ 10 февраля 2020

Добро пожаловать в мир боли - Odata - отличная идея с довольно плохой реализацией. Но да, это удивительно - делать это самому.

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

Если это спросить, что я думаю, что он делает (ваш engli sh ОЧЕНЬ неясен), то нет, это не так - ваша ошибка состоит в том, что вы выставляете объекты ef напрямую. У меня есть отдельные объекты API и выставить их с помощью AutoMapper ProjectTo. Да, мне нужно определять отношения заранее, но не на уровне ef.

Мне нужно использовать EF Include заранее.

Это потому, что вы решили. Я активно использую, как я уже сказал, Automapper ProjectTo - и получаю необходимые расширения из информации OdataOptions SelectExpand динамически. Не нужно отправлять весь объектный граф в EF (что происходит, если вы расширяете все возможные расширения с помощью включений), это приведет к очень плохой производительности. Просто страница программирования для получения соответствующих включений.

Будет ли конечная точка oData внедряться между EF и DB и выбирать только 100 результатов из DB в этом случае?

если это запрограммировано так, то да. Если кто-то испытывает трудности с программами LINQ и упаковывает ef в один из нелепых неэффективных шаблонов репозитория, которые возвращают IENumerable - тогда нет, он, возможно, потянет все. Там было видно это. Но обычно TOP (1) приводит к sql, выбирающему только первый элемент.

...