Глобальные фильтры запросов очень удобны при реализации функций клиента и мягкого удаления.
Но моя проблема в том, что когда я пишу запрос с объединениями, например
dbContext
.entity1
.Include("entity2.entity3.entity4")
.Where(something)
.select(something)
.toList();
и каждый одна из этих сущностей имеет глобальные фильтры, затем в сгенерированном SQL я получаю для каждого JOIN полный подзапрос, в котором он выбирает все поля этого объекта и проверяет наличие глобальных фильтров.
Но я не хочу этого. Я хочу, чтобы глобальные фильтры применялись только к объекту root запроса (entity1), а ко всем остальным объектам присоединяться нормально.
кстати, отношения между объектами следующие:
- 1 entity4 -> N entity3
- 1 entity3 -> N entity2
- 1 entity2 -> N entity1
В моем случае каждая сущность получает свою "tenant" поле установлено, и при мягком удалении объекта это мягкое удаление каскадно ко всем его дочерним и дочерним элементам. Из-за этого проверка этих полей для каждого соединения - пустая трата времени.