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


我需要为我的db上下文创建一个全局过滤器。过滤器应仅显示与当前用户具有相同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 MyDB(int companyId) : base("name=DefaultConnection")
    {

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

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

谢谢你的帮助

一般承认的答案

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

因此,在用户登录时,companyId不会更改。

您不能将全局筛选器用于对所有查询都不是全局的谓词。

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

不幸的是,对于您的场景,我们的EF +查询过滤器无法使用。

我建议你尝试使用EntityFramework.DynamicFilters ,他们可能会更好地处理这种场景和我们的库。





许可下: CC-BY-SA
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因