zzzprojects / Entity Framework Plus動的変数を持つグローバルフィルタ


質問

私は、DBコンテキストのグローバルフィルタを作成する必要があります。フィルターには、現在のユーザーと同じ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と同じです。各ユーザーは1つの会社に所属することができます。したがって、ユーザーがログインしている間はcompanyIdは変更されません。

すべてのあなたの助けをありがとう

受け入れられた回答

免責事項 :私はEntity Framework Plusプロジェクトのオーナーです

したがって、ユーザーがログインしている間はcompanyIdは変更されません。

すべてのクエリに対してグローバルではない述語に対しては、グローバルフィルタを使用することはできません。

グローバルフィルタを使用すると、すべてのクエリは会社Aを使用してコンパイルされます。ただし、B社の誰かがアプリケーションにログインすると、フィルタリングされたすべてのクエリはA社のコンパイル済みクエリを引き続き使用します。

残念ながら、あなたのシナリオでは、EF + Query Filterは使用できません。

代わりにEntityFramework.DynamicFiltersを試してみることをお勧めします。





ライセンスを受けた: CC-BY-SA
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ