Zzzprojects / Entity Framework Plus filtros globales con variables dinámicas

c# entity-framework-6 entity-framework-plus

Pregunta

Necesito crear un filtro global para mi contexto de db. El filtro debe mostrar solo los objetos con el mismo ID de empresa que el usuario actual.

En este momento, estoy pasando companyId como así:

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

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

Pero, no funciona bien con la carga perezosa (propiedades virtuales). Entonces, necesito implementar un filtro global y no tengo idea de dónde comenzar y cómo pasarle la variable companyId.

Aquí está mi aplicaciónUser

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

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

CompanyId es igual al usuario CompanyId actual. Cada usuario podría pertenecer a una empresa. Entonces, companyId no cambiará mientras un usuario inicie sesión.

Gracias por toda tu ayuda

Respuesta aceptada

Descargo de responsabilidad : soy el propietario del proyecto Entity Framework Plus

Entonces, companyId no cambiará mientras un usuario inicie sesión.

No puede usar un filtro global para un predicado que no sea global para todas las consultas.

Si utiliza un filtro global, todas las consultas se compilarán utilizando, por ejemplo, la empresa A. Sin embargo, si alguien de la empresa B inicia sesión en su aplicación, todas las consultas filtradas seguirán utilizando la consulta compilada de la empresa A.

Desafortunadamente, para su escenario, nuestro Filtro de Consulta EF + no puede ser usado.

Te recomiendo que pruebes en su lugar EntityFramework.DynamicFilters , quizás manejen mejor este tipo de escenario y nuestra biblioteca.




Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué