0

我正在寻找一种将全局过滤器应用于我在 EF 中的实体的方法。我偶然发现了EF plus,但在过滤我的相关实体时遇到了一些问题。我当前的设置如下所示:

我有一个TenantEntity,它固有的Entity,它包含像CreatedUtc, UpdatedUtc,IdTenantId其他一般的东西。

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();
    }
}

这就是问题发生的地方,Teamand TeamMember( Team.Members) 实体都来自TenantEntity. 但是如果我打电话UnitOrWork.TeamRepository.GetAll(),它会过滤掉已删除Team的s,而不是TeamMembers团队内的deleted。

有什么方法可以过滤掉这些,而不必扩展我的所有查询?

4

0 回答 0