Я использую контекст на поток. Это хитро для установки, но это очищает все, что должно говорить с дб.
Я использовал эквивалент оператора if-elseif-else для решения проблемы, например:
(условие1)? (истинное значение1): (условие2)? (истинное значение2): (ложное значение)