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

时间:2017-07-10 17:08:20

标签: c# entity-framework-6 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 class ApplicationUser : IdentityUser
{
    public int CompanyId { get; set; }

}

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

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

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

  

因此,在用户登录时,companyId不会发生变化。

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

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

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

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