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,他们可能会更好地处理这种情况和我们的库。
我需要为我的数据库上下文创建一个全局过滤器。过滤器应仅显示与当前用户具有相同 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,他们可能会更好地处理这种情况和我们的库。