Изменения документа Serialize.Linq
Редактировал(а) Alexandr Fokin 2023/02/08 14:08
От версии 1.3
отредактировано Alexandr Fokin
на 2020/12/20 21:57
на 2020/12/20 21:57
Изменить комментарий:
Редактировать комментарий
К версии 1.13
отредактировано Alexandr Fokin
на 2020/12/20 22:11
на 2020/12/20 22:11
Изменить комментарий:
Редактировать комментарий
Сводка
-
Объекты (1 изменено, 0 добавлено, 0 удалено)
Подробности
- XWiki.XWikiComments[0]
-
- Комментарий
-
... ... @@ -5,10 +5,22 @@ 5 5 консольный клиент 6 6 7 7 Клиент посылает на сервер LINQ expression tree в формате JSON. 8 -Сервер получает запрос, десереализует и выполняет. ( использовалось обращение к List, обращение к EF iqueryable)8 +Сервер получает запрос, десереализует и выполняет. (обращение к List, обращение к EF iqueryable) 9 9 Сервер возвращает результирующий набор данных. 10 10 11 +Заметка: 12 + expression tree может быть как частичным (например select(Func<DbEntity, DbEntity>), where(Func<DbEntity, bool>), 13 + так и полностью формировать выборку (Func<IEnumerable<DbEntity>, IEnumerable<DbEntity>>) 14 + (причем в данном случае клиент сам может определить момент материализации запроса) 11 11 12 -Удалось создать собственный класс-сущность, содержащий несколько выражений (select, where). 13 -Передать сериализованный экземпляр класса на сервер. 14 -На сервере получить выражения и применить их к набору IEnumerable. 16 + 17 +Опционально: 18 +- Предполагается, что делаем выборки только на чтение - сразу отключаем changeTracking 19 +- Параметр запроса, отвечающий за LazyLoading 20 +- Параметр, отвечающий за загрузку связанных данных (или флаг, или отдельные выражения для Include) 21 +- Насколько понимаю: классы, задействованные в linq выражении, должны иметь идентичные название и namespace в клиентском и серверном приложении. 22 + (Иначе возможно придется на сервере делать автозамену полного имени класса) 23 + 24 + 25 +Из минусов: 26 +вся ответственность по формированию выражения (и соответственно sql запроса) ложиться на клиента, сложнее сделать валидацию, если вообще можно.