【发布时间】:2020-05-10 01:38:44
【问题描述】:
我想知道以下情况是否可能: 我创建了一个通用存储库来处理多个实体上的 CRUD 操作。鉴于我对实体有软删除实现,对于与其他实体相关的某个实体,我想根据属性过滤包含的实体,比如 IsDeleted。
public abstract class Repository<T, TOrderBy> where T : BaseEntity
{
...
protected IQueryable<T> Get(Expression<Func<T, bool>> filter = null,
params Expression<Func<T, object>>[] includes)
{
var query = Set.AsQueryable();
if (filter != null)
{
query = query.Where(x => !x.DeletedAt.HasValue).Where(filter);
}
if (includes != null)
{
foreach (var include in includes)
{
query = query.Include(include); // In here i would like to also filter the included entities based on the IsDeleted property
}
}
return query;
}
}
BaseEntity 类看起来像这样,所有的类(包括我想在 Include 方法中过滤的类)都继承自它:
public abstract class BaseEntity
{
public bool IsDeleted { Get; Set; }
}
我知道包含的实体可以在具体实体可用的级别上进行过滤,但我想知道这是否可以在通用存储库类上进行,所以我不需要检查每个查询的 IsDeleted 属性在特定的存储库中。
谢谢。
【问题讨论】:
-
你可以在 ef core 中使用 QueryFilters。
-
@Neil 很遗憾,我需要使用 EF 6。
标签: c# entity-framework generics