我需要为我的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不会发生变化。
感谢您的帮助
答案 0 :(得分:1)
免责声明:我是该项目的所有者Entity Framework Plus
因此,在用户登录时,companyId不会发生变化。
您不能将全局过滤器用于对所有查询都不是全局的谓词。
如果您使用全局过滤器,则所有查询都将使用公司A的示例进行编译。但是,如果公司B的某人登录您的应用程序,则所有过滤的查询仍将使用来自公司A的编译查询。
不幸的是,对于您的方案,我们的EF +查询过滤器无法使用。
我建议您尝试代替EntityFramework.DynamicFilters,他们可能会更好地处理这种情况和我们的库。