zzzprojects / Entity Framework 플러스 동적 변수가있는 전역 필터


문제

내 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와 같습니다. 각 사용자는 한 회사에 속할 수 있습니다. 따라서 사용자가 로그인하는 동안 companyId는 변경되지 않습니다.

모든 도움에 감사드립니다

수락 된 답변

면책 조항 : 저는 Entity Framework Plus 프로젝트의 소유자입니다.

따라서 사용자가 로그인하는 동안 companyId는 변경되지 않습니다.

모든 조회에 대해 글로 z가 아닌 술어에 대해서는 글 Nz 필터를 사용할 수 없습니다.

전역 필터를 사용하는 경우 모든 쿼리는 회사 A를 사용하여 컴파일됩니다. 그러나 회사 B의 누군가가 응용 프로그램에 로그인하면 필터링 된 모든 쿼리는 회사 A의 컴파일 된 쿼리를 계속 사용합니다.

유감스럽게도 귀하의 시나리오에서는 EF + Query Filter를 사용할 수 없습니다.

대신 EntityFramework.DynamicFilters 를 시도해 보길 권합니다.이 시나리오와 라이브러리를 더 잘 처리 할 수 ​​있습니다.





아래 라이선스: CC-BY-SA
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.