Filtres globaux zzzprojects / Entity Framework Plus avec variables dynamiques

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

Question

Je dois créer un filtre global pour mon contexte de base de données. Le filtre ne doit afficher que les objets ayant le même identifiant de société que l'utilisateur actuel.

En ce moment, je passe companyId comme suit:

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

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

Mais cela ne fonctionne pas bien avec le chargement différé (propriétés virtuelles). J'ai donc besoin d'un filtre global et je ne sais pas par où commencer ni comment y passer la variable companyId.

Voici mon 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 est égal à l'utilisateur actuel CompanyId. Chaque utilisateur peut appartenir à une entreprise. Ainsi, companyId ne changera pas tant qu'un utilisateur s'est connecté.

Je vous remercie pour votre aide

Réponse acceptée

Disclaimer : Je suis propriétaire du projet Entity Framework Plus

Ainsi, companyId ne changera pas tant qu'un utilisateur s'est connecté.

Vous ne pouvez pas utiliser un filtre global pour un prédicat qui n'est pas global pour toutes les requêtes.

Si vous utilisez un filtre global, toutes les requêtes seront compilées en utilisant, par exemple, la société A. Toutefois, si une personne de la société B se connecte à votre application, toutes les requêtes filtrées utilisent toujours la requête compilée de la société A.

Malheureusement, pour votre scénario, notre filtre de recherche EF + ne peut pas être utilisé.

Je vous recommande d'essayer plutôt EntityFramework.DynamicFilters , ils gèrent peut-être mieux ce genre de scénario et notre bibliothèque.




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi