Изменения документа Serialize.Linq

Редактировал(а) Alexandr Fokin 2023/02/08 14:08

От версии 1.13
отредактировано Alexandr Fokin
на 2020/12/20 22:11
Изменить комментарий: Редактировать комментарий
К версии 1.3
отредактировано Alexandr Fokin
на 2020/12/20 21:57
Изменить комментарий: Редактировать комментарий

Сводка

Подробности

XWiki.XWikiComments[0]
Комментарий
... ... @@ -5,22 +5,10 @@
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 - (причем в данном случае клиент сам может определить момент материализации запроса)
15 15  
16 -
17 -Опционально:
18 -- Предполагается, что делаем выборки только на чтение - сразу отключаем changeTracking
19 -- Параметр запроса, отвечающий за LazyLoading
20 -- Параметр, отвечающий за загрузку связанных данных (или флаг, или отдельные выражения для Include)
21 -- Насколько понимаю: классы, задействованные в linq выражении, должны иметь идентичные название и namespace в клиентском и серверном приложении.
22 - (Иначе возможно придется на сервере делать автозамену полного имени класса)
23 -
24 -
25 -Из минусов:
26 -вся ответственность по формированию выражения (и соответственно sql запроса) ложиться на клиента, сложнее сделать валидацию, если вообще можно.
12 +Удалось создать собственный класс-сущность, содержащий несколько выражений (select, where).
13 +Передать сериализованный экземпляр класса на сервер.
14 +На сервере получить выражения и применить их к набору IEnumerable.