Re[3]: DDD: фильтр по временной таблице в Репозиториях
От: Sinclair Россия https://github.com/evilguest/
Дата: 11.06.24 10:55
Оценка:
Здравствуйте, zelenprog, Вы писали:

Z>Я пока пользуюсь sqlite.

Z>Как мне кажется, там кроме временных таблиц ничего другого нельзя применить.
Простите, но с чего вы это взяли?

Z>Кроме того, из БД нужно выбрать и аналоги и упаковки для одного и того же списка товаров.

Z>То есть все равно придется выполнить два запроса. Значит, список товаров должен каким-то образом быть "общим".
Ну вот он так и делается "общим": в него встраивается один и тот же запрос, получающий ID товаров.
Z>Поэтому мне кажется, что все-таки лучше этот список товаров предварительно положить куда-то на sql-сервер, чтобы затем выполнить эти два запроса, использующие этот "общий" список товаров.
Z>Зачем его дважды гонять туда-сюда на сервер?
У вас же sqlite, никакого "гоняния" нету.
Z>Куда его положить, кроме как во временную таблицу?
В сам запрос.

Z>Наверно это можно решить добавлением нового поля во временную таблицу типа "ID_сессии".

Я же говорю — можно обложить костылями. Когда вы будете чистить эти временные таблицы?

Z>А как это — "единый запрос"?

SELECT * FROM analogs WHERE analog.tovar_id IN (select * from tovar where ...)



Z>Я читал про linq, но по сути не знаю.

Z>Если при вызове функций репозиториев "GetList" формируются только запросы, то в какой момент они выполняются?
Z>По какой-то отдельной команде?
В тот момент, когда запрос начинают "перебирать" как IEnumerable.

Z>Так как у меня sqlite,

Дело не в sqlite. Linq2db прекрасно и с sqlite работает.
Просто построить нормальный аналог linq на платформе, которая его не поддерживает — малореальное удовольствие.

Z>Ленивые запросы — это и есть "отложенное" манипулирование запросами?

Да.

S>>... то можно обойтись простым вариантом, в котором AnalogRepository при построении GetListByTovars(IEnumerable<Tovar>) просто берёт и строит список ID переданных ему товаров: SELECT * FROM analogs WHERE analog.tovar_id IN (4, 8, 15, 16, 23, 42)

S>>Здесь нет никакой временной таблицы и связанных с ней проблем.

Z>А если список товаров очень большой? ID-шники задаются в виде GUID-ов, то есть очень длинные.

Что такое "очень большой"?
Z>Строка запроса по списку 1000 товаров превысит все допустимые размеры.
У sqlite "допустимые размеры" — 1 000 000 0000 символов. Подозреваю, что запрос на 1000 товаров их не превысит.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.