AutoQuery / Ormlite-servicestack: Могу ли я отфильтровать мягкие удаления в классе QueryDb?

У нас есть несколько сервисов, созданных с помощью Ormlite/Servicestack, и мы в основном извлекаем объекты базы данных и POCO, используя QueryData с пользовательской логикой.

Тем не менее, у нас есть одна таблица, которую на самом деле не нужно логически расширять, и она прекрасно справляется с запросом к БД напрямую из внешнего интерфейса, используя параметры AutoQuery и URL. Тем не менее, эта таблица содержит isDeleted столбец для отслеживания мягких удалений. На внешнем интерфейсе не должно быть элементов, удаленных программным способом, и мы считаем, что внешний интерфейс не должен иметь возможность получать эти записи (т.е. не должен отвечать за запросы API с помощью ?&isDeleted=false).

Итак, учитывая нашу текущую настройку:

[Route("/query/thing/stuff", HttpMethods.Get)]
public class secret_table: QueryDb<secret_table>
{
}

... было бы возможно реализовать фильтр для QueryDb<> автоматически исключать записи, где isDeleted=true? И сможет ли это быть применено только к этой таблице / классу?

Я mythz молоко и печенье в надежде, что mythz и оставит подарок... но любая помощь приветствуется, конечно!

1 ответ

Решение

Вы пытались использовать один из вариантов расширения?

Вы также должны иметь возможность использовать фильтр выбора OrmLite для включения программного удаления, например:

SqlExpression<secret_table>.SelectFilter = q => q.Where(x => x.IsDeleted != true);

Обратите внимание, что ваш AutoQuery DTO не должен повторно использовать имя таблицы в качестве имени DTO, используйте другое имя, например:

[Route("/query/thing/stuff", HttpMethods.Get)]
public class QuerySecretTable: QueryDb<secret_table> {}
Другие вопросы по тегам