zzzprojects / Entity Framework Plus globale Filter mit dynamischen Variablen


Frage

Ich muss einen globalen Filter für meinen Datenbankkontext erstellen. Der Filter sollte nur Objekte mit derselben Firmen-ID wie der aktuelle Benutzer anzeigen.

Im Moment passiere ich companyId so:

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

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

Aber, es funktioniert nicht gut mit Lazy Loading (virtuelle Eigenschaften). Also, ich muss einen globalen Filter implementieren und ich habe keine Ahnung, wo ich anfangen soll und wie ich die Variable CompanyId hineinbringen kann.

Hier ist mein 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 entspricht dem Benutzer CompanyId des aktuellen Benutzers. Jeder Benutzer könnte zu einer Firma gehören. Daher ändert sich die CompanyId nicht, während sich ein Benutzer anmeldet.

Danke für all deine Hilfe

Akzeptierte Antwort

Haftungsausschluss : Ich bin der Eigentümer des Projekts Entity Framework Plus

Daher ändert sich die CompanyId nicht, während sich ein Benutzer anmeldet.

Sie können keinen globalen Filter für ein Prädikat verwenden, das nicht für alle Abfragen global ist.

Wenn Sie einen globalen Filter verwenden, werden alle Abfragen mit dem Beispiel der Firma A kompiliert. Wenn sich jedoch ein Benutzer der Firma B bei Ihrer Anwendung anmeldet, verwendet die gefilterte Abfrage weiterhin die kompilierte Abfrage der Firma A.

Leider kann unser EF + Query Filter für Ihr Szenario nicht verwendet werden.

Ich empfehle Ihnen, stattdessen EntityFramework.DynamicFilters zu versuchen, sie können dieses Szenario und unsere Bibliothek vielleicht besser handhaben.





Lizenziert unter: CC-BY-SA
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum