zzzprojects/Entity Framework Plus 具有动态变量的全局过滤器

zzzprojects/Entity Framework Plus global filters with dynamic variables

我需要为我的数据库上下文创建一个全局过滤器。过滤器应仅显示与当前用户具有相同 companyId 的对象。

现在,我像这样传递 companyId:

  public MyDB(int companyId) : base("name=DefaultConnection")
    {

            this.Filter<BaseModel>(q => q.Where(x =>  (x.CompanyId == companyId || x.IsGlobal==true) && x.IsDeleted == false));
    }

但是,它不适用于延迟加载(虚拟属性)。所以,我需要实现一个全局过滤器,但我不知道从哪里开始以及如何将 companyId 变量传递给它。

这是我的 ApplicationUser

 public class ApplicationUser : IdentityUser
{
    public int CompanyId { get; set; }

}

CompanyId 等于当前用户的CompanyId。每个用户可以属于一个公司。因此,companyId 在用户登录时不会更改。

感谢大家的帮助

免责声明:我是项目的所有者Entity Framework Plus

So, companyId won't change while a user logged in.

您不能对并非对所有查询都是全局的谓词使用全局过滤器。

如果您使用全局过滤器,所有查询将使用公司 A 的示例编译。但是,如果公司 B 的某人登录您的应用程序,所有过滤的查询仍将使用公司 A 的编译查询。

很遗憾,对于您的场景,我们的 EF+ 查询过滤器无法使用。

我建议您改为尝试 EntityFramework.DynamicFilters,他们可能会更好地处理这种情况和我们的库。