Естественным выбором ORM для приложения на .net является EF Core. Эта ORM поддерживает много неочевидных и интересных возможностей, облегчающих решение повседневных задач.
Сегодня разберём применение глобальных фильтров.
Глобальные фильтры полезны в случаях, когда вам нужно ограничивать доступ к сущностям по определенным правилам, которые повторяются от запроса к запросу. Например:
Во всех подобных случаях возникает необходимость добавления дополнительных условий в каждый запрос. Для простоты разберём на примере флага Deleted.
Предположим, у вас есть сущность заказа Order: Всякий раз, запрашивая список заказов, вам необходимо добавлять условие .Where(order => !order.Deleted). Делать это придётся вне зависимости от того, используете ли вы паттерн Спецификация, или строите свои запросы напрямую над DbSet: При таком подходе возникает две проблемы:
Чтобы решить обе эти проблемы, достаточно использовать глобальный фильтр, объявить который можно в классе-наследнике DbContext: Теперь мож