我正在寻找一种将全局过滤器应用于我在 EF 中的实体的方法。我偶然发现了EF plus,但在过滤我的相关实体时遇到了一些问题。我当前的设置如下所示:
我有一个TenantEntity
,它固有的Entity
,它包含像CreatedUtc
, UpdatedUtc
,Id
和TenantId
其他一般的东西。
public abstract class TenantEntity : Entity
{
public Guid TenantId { get; set; }
}
然后,我有一个通用的MultitenantRepository
,这是应用过滤的地方(目前使用 EF plus):
public class MultitenantRepository<TEntity> where TEntity : TenantEntity
{
public MultitenantRepository(DbContext context, ITenantProvider tenantProvider)
{
this.TenantProvider = tenantProvider;
this.Context = context;
this.Context.Filter<TEntity>(e => e.Where(w => w.TenantId == tenantProvider.GetTenantId()));
this.Context.Filter<TEntity>(e => e.Where(w => w.DeletedUtc == null));
}
}
我为数据库中的每个实体创建一个新的 MultitenantRepository,例如对于Team
实体,我将像这样创建它:
public class TeamRepository : MultitenantRepository<Team>
{
public TeamRepository(DbContext context, ITenantProvider tenantProvider)
: base(context, tenantProvider)
{
}
public override IEnumerable<Team> GetAll()
{
return OkayrContext.Teams
.Include(t => t.Members)
.ThenInclude(m => m.Employee)
.AsEnumerable();
}
}
这就是问题发生的地方,Team
and TeamMember
( Team.Members
) 实体都来自TenantEntity
. 但是如果我打电话UnitOrWork.TeamRepository.GetAll()
,它会过滤掉已删除Team
的s,而不是TeamMembers
团队内的deleted。
有什么方法可以过滤掉这些,而不必扩展我的所有查询?