Entity Framework ByPass QueryFilter / SoftDelete - PullRequest
0 голосов
/ 23 января 2020

У меня есть пользовательская таблица, в которой я использую метод мягкого удаления, чтобы убедиться, что пользователи, которые хотят быть удалены, удаляются только виртуально. Это связано с тем, что у пользователя все еще могут быть некоторые расходы, и нам нужно отправить ему счет, даже если они будут удалены.

В Entity Framework OnModelCreating Я использую

modelBuilder.Entity<UserDomain>().Property<bool>("isDeleted");
modelBuilder.Entity<UserDomain>().HasQueryFilter(m => EF.Property<bool>(m, "isDeleted") == false);

Теперь везде Я получаю пользователя, (мягкие) удаленные пользователи игнорируются. Хотя они все еще существуют в базе данных.

Однако теперь я хочу сделать запрос, который включает обнаруженных пользователей, чтобы я мог при необходимости отправить им счет-фактуру.

Я думал, что смогу обойти это используя context.Users.FromSql([query]). Но это неправда. Он по-прежнему отфильтровывает удаленные записи.

Как я могу обойти QueryFilter?

Ответы [ 2 ]

3 голосов
/ 23 января 2020

Использовать .IgnoreQueryFilters ()

var list = context.Users.IgnoreQueryFilters();
0 голосов
/ 23 января 2020

Простым решением было бы просто использовать другой DbContext с другой конфигурацией.

DbContext не является моделью базы данных, вам не нужно (на самом деле не следует) иметь только один DbContext для приложения или базы данных. DbContext - это, по сути, единица работы / ограниченный контекст в терминах DDD.

Более того, DbContext содержит сущности, а не таблицы. Его задача - сопоставить объекты / сущности приложения с реляционными таблицами. Это не должна быть копия базы данных.

Ничто не мешает вам иметь сущности с разными или меньшими свойствами для разных бизнес-контекстов, которые в конечном итоге, например, отображаются в одни и те же таблицы.

В веб-приложении вам потребуются разные данные для аутентификации пользователя и разные данные для отображения списка зарегистрированных пользователей или отображения приветствия. Например, нет необходимости загружать все атрибуты пользователя для аутентификации, и вам не нужно загружать пароль ha sh при отображении списка пользователей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...