У меня не было опыта работы с OData, но, насколько я вижу, он предназначен для подпитки контекста и управляет взаимодействием и возвратом этих моделей.Я определенно не фанат возврата сущностей в любой форме клиенту.
Это ужасная ситуация, но когда я сталкиваюсь с этим, мой первый путь действий - отодвинуть клиентов, чтобы оправдать их потребности в поиске.Запрос по умолчанию почти всегда: «Хорошо, было бы неплохо иметь возможность поиска по всему».Мой ответ на этот вопрос заключается в том, что я не хочу знать, что вы хотите, я хочу знать, что вам нужно, потому что я не хочу давать вам заряженное ружье, чтобы отстреливать себе ногу, а затем заставлять вас винить меня, потому чтосистема остановилась.Поиск является огромным фактором снижения производительности, если он слишком открыт.Трудно проверить точность / релевантность и эффективно проиндексировать 100% возможных случаев поиска, когда пользователям требуется только * 25% этих сценариев.Если клиент не может сказать вам, в каком поиске он будет нуждаться, и просто хочет все, потому что ему может это нужно, тогда ему это пока не нужно.
Лично я придерживаюсь определенных поисковых DTOи перевести их в выражения linq.
Если бы я столкнулся с жестким требованием реализовать что-то подобное, я бы:
- Попытался бы заставить эти поиски / отчеты бытьсделано от реплики отчетности, которая синхронизируется с действующей базой данных.(Чтобы свести к минимуму кровотечение, когда некоторые менеджеры-идиоты запускают некоторые дурацкие неиндексированные критерии поиска, чтобы он не связывал производственную БД, где люди пытаются выполнять работу.)
- Создание нового ограниченного специфичного для DbContextдля поиска с отдельными определениями сущностей, которые предоставляют только минимальное количество свойств для представления критериев поиска и идентификаторов.
- Подключите этот ограниченный контекст к API и OData.Он вернет «результаты поиска».Когда пользователь выбирает результаты поиска, используйте идентификаторы (ID) для API, чтобы загрузить соответствующий домен, или инициируйте действие и т. Д.
нет.1. Необязательно, приятно, если они могут жить с поиском, не «видя» обновленных критериев, пока не будет воспроизведен.(То есть от нескольких секунд до минут в зависимости от стратегии / размера репликации) Обычно эти поиски используются для запросов типа отчетов, поэтому я бы старался отделить их от обычных вариантов повседневного поиска, которые используют пользователи.(Т.е. опция расширенного поиска или тому подобное.)