zzzprojects / Entity Framework Plus filtri globali con variabili dinamiche

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

Domanda

Devo creare un filtro globale per il mio contesto db. Il filtro dovrebbe mostrare solo gli oggetti con la stessa companyId dell'utente corrente.

In questo momento, sto passando la società come così:

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

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

Ma, non funziona bene con il caricamento lento (proprietà virtuali). Quindi, ho bisogno di implementare un filtro globale e non ho idea di dove cominciare e come passare la variabile companyId in esso.

Ecco il mio 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 è uguale a CompanyId dell'utente corrente. Ogni utente potrebbe appartenere a una società. Quindi, companyId non cambierà mentre un utente ha effettuato l'accesso.

Grazie per tutto il tuo aiuto

Risposta accettata

Disclaimer : sono il proprietario del progetto Entity Framework Plus

Quindi, companyId non cambierà mentre un utente ha effettuato l'accesso.

Non è possibile utilizzare un filtro globale per un predicato che non è globale per tutte le query.

Se si utilizza un filtro globale, tutte le query verranno compilate utilizzando l'esempio della società A. Tuttavia, se qualcuno dell'azienda B accede all'applicazione, tutte le query filtrate continueranno a utilizzare query compilate dalla società A.

Sfortunatamente, per il tuo scenario, il nostro filtro di query EF + non può essere utilizzato.

Ti consiglio di provare invece EntityFramework.DynamicFilters , forse gestiscono meglio questo tipo di scenario e la nostra libreria.




Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché