#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