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. Каждый пользователь может принадлежать одной компании. Таким образом, companyId не будет изменяться во время входа пользователя в систему.

Спасибо за твою помощь

Принятый ответ

Отказ от ответственности : Я являюсь владельцем проекта Entity Framework Plus

Таким образом, companyId не будет изменяться во время входа пользователя в систему.

Глобальный фильтр нельзя использовать для предиката, который не является глобальным для всех запросов.

Если вы используете глобальный фильтр, все запросы будут скомпилированы с использованием примера компании A. Однако, если кто-то из компании B войдет в ваше приложение, все отфильтрованные запросы будут по-прежнему использовать скомпилированный запрос от компании A.

К сожалению, для вашего сценария наш EF + Query Filter не может быть использован.

Я рекомендую вам попробовать вместо этого EntityFramework.DynamicFilters , возможно, они справятся с этим сценарием и нашей библиотекой.





Лицензировано согласно: CC-BY-SA
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему