zzzprojects / Entity Framework Plus帶有動態變量的全局過濾器


我需要為我的db上下文創建一個全局過濾器。過濾器應僅顯示與當前用戶具有相同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 MyDB(int companyId) : base("name=DefaultConnection")
    {

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

CompanyId等於當前用戶的CompanyId。每個用戶都可以屬於一個公司。因此,在用戶登錄時,companyId不會更改。

謝謝你的幫助

一般承認的答案

免責聲明 :我是項目Entity Framework Plus的所有者

因此,在用戶登錄時,companyId不會更改。

您不能將全局篩選器用於對所有查詢都不是全局的謂詞。

如果您使用全局過濾器,則將使用公司A的示例編譯所有查詢。但是,如果公司B的某人登錄到您的應用程序,則所有過濾的查詢仍將使用來自公司A的編譯查詢。

不幸的是,對於您的場景,我們的EF +查詢過濾器無法使用。

我建議你嘗試使用EntityFramework.DynamicFilters ,他們可能會更好地處理這種場景和我們的庫。





許可下: CC-BY-SA
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因