Запрос Linq Entity Framework с IgnoreQueryFilters() не работает со свойством lazyload даже с включением

#c# #entity-framework #entity-framework-core

#c# #entity-framework #entity-framework-core

Вопрос:

Итак, у меня есть таблица с пользователями, и я использую в ней softdeletes.

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

Поэтому, когда пользователь удаляется, столбец IsDeleted в таблице user переключается на true. Каждый запрос, использующий таблицу, будет игнорировать этого пользователя, поскольку он будет удален. Пока все хорошо.

Теперь, если я хочу получить удаленных пользователей, я делаю что-то вроде:

 dbContext.Users.IgnoreQueryFilters().Where(u => u.id == 1);
  

Это тоже работает. Я получаю пользователя, хотя он удален.

Но теперь возникает проблема. У меня есть таблица со счетами, и они ссылаются на пользователя с помощью lazyloading.

Например:

 class InvoiceDomain {
  int Id {get;set;}
  private UserDomain _user;
  virtual public UserDomain User { get => (_user != null) ? _user : _lazyLoader.Load(this, ref _user); set => _user = value; }

  private ILazyLoader _lazyLoader { get; set; }
  public InvoiceDomain(ILazyLoader lazyLoader) { _lazyLoader = lazyLoader; }

}
  

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

Итак, я подумал: dbContext.Invoices.IgnoreQueryFilters().include(i => i.User).Where(i => i.Id == 1);

Но это не работает. Когда я позже использую invoice.user это все еще null . Как я могу убедиться, что при загрузке счета-фактуры также загружается автоматически удаленный пользователь?

Комментарии:

1. Не могли бы вы попробовать поместить IgnoreQueryFilters после Include инструкции

2. Какую версию ядра EF вы используете? То, что вы описываете, работает в последней официальной версии 3.1