Добавить выражение в базу репозитория на языке Си#
Всем привет
Я использую asp.net 4.5 с кодом, сначала использующим шаблон репозитория в c#.
базовый класс :
public interface IAuditableEntity { ... string DeletedBy { get; set; } DateTime? DeletedDate { get; set; } bool IsDeleted { get; set; } } public abstract class AuditableEntity: IAuditableEntity { ... public string DeletedBy { get; set; } public DateTime? DeletedDate { get; set; } public bool IsDeleted { get;set; } }
класс:
public class Group : AuditableEntity { public int Id {get;set;} public string Code { get; set; } public string Name { get; set; } public GroupType Type { get; set; } public string Description { get; set; } public int? ParentId { get; set; } }
Хранилище Базы :
public class RepositoryBase<T> : IRepository<T> where T : class { protected DbContext _entities; protected DbSet<T> dbSet; #endregion public RepositoryBase(DbContext context) { _entities = context; dbSet = context.Set<T>(); } ... public virtual IQueryable<T> GetAll() { try { return dbSet; } catch (Exception ex) { throw ex; } } public virtual IQueryable<T> GetMany(Expression<Func<T, bool>> where) { return dbSet.Where(where); } ... }
мой вопрос:
я хочу, чтобы добавить выражение в `способность` и `функция гетманы` если IAuditableEntry Repositorybase Т использовать ``
Что я уже пробовал:
public virtual IQueryable<T> GetAll() { try { return dbSet.Where(x=> x is IAuditableEntity && !((IAuditableEntity)x).IsDeleted); } catch (Exception ex) { throw ex; } }
Когда я использовал это
верните dbSet.Где(Х=> У Х IAuditableEntity &&усилителя; !((IAuditableEntity)x).IsDeleted);
он показывает ошибку, как :
The 'TypeIs' expression with an input of type 'Group' and a check of type 'Base.IAuditableEntity' is not supported. Only entity types and complex types are supported in LINQ to Entities queries.
Richard Deeming
catch (Exception ex) { throw ex; }
Не делай этого! Вы только что отбросили трассировку стека исключения, что значительно затрудняет определение того, откуда оно было выброшено.
Если ты действительно хотите повторно выбросить исключение, просто используйте
throw;
вместо throw ex;
:catch (Exception) { throw; }
Но в этом случае, поскольку вы не делаете ничего, кроме переосмысления исключения, нет никакого смысла ловить его в первую очередь. Просто уберите его
try..catch
заблокируйте, и пусть исключение распространяется нормально.
Richard Deeming
Если вы используете ядро Entity Framework, вам может потребоваться настроить глобальный фильтр для скрытия мягко удаленных сущностей:
Глобальные фильтры запросов - EF Core | Microsoft Docs[^]