Свойства виртуальной навигации и мультитенантность

У меня есть стандартDbContext с кодом, подобным следующему: I '

 public DbSet Interests { get; set; }
 public DbSet Users { get; set; }

Мы недавно внедрили многопользовательский режим, создавTenantContext который содержит следующее:

  private readonly DbContext _dbContext;
  private readonly Tenant _tenant;

  public TenantContext(Tenant tenant)
        : base("name=DefaultConnection") {
        this._tenant = tenant;
        this._dbContext = new DbContext();
    }

   public IQueryable Users { get { return FilterTenant(_dbContext.Users); } }
   public IQueryable Interests { get { return FilterTenant(_dbContext.Interests); } }


   private IQueryable FilterTenant(IQueryable values) where T : class, ITenantData
    {
        return values.Where(x => x.TenantId == _tenant.TenantId);
    }

Пока что это работает отлично. Всякий раз, когда какой-либо из моих сервисов создает новый TenantContext, все запросыпрямо из этого контекста фильтруются через этоFilterTenant метод, который гарантирует, что ям возвращаются только соответствующие арендатору лица.

Проблема в том, что яЯ использую свойства навигации, которые не учитывают это:

  using (var db = CreateContext())  // new TenantContext
        {
            return db.Users.
                Include(u => u.Interests).FirstOrDefault(s => s.UserId == userId);
        }

Этот запрос поднимает специфичный для арендатораUsers, но тогдаInclude() заявление тянетInterests только для этого пользователя - но для всех арендаторов. Так что, если у пользователя есть интересы нескольких арендаторов, я получаю всеs Интересует вышеуказанный запрос.

Моя модель пользователя имеет следующее:

 public int UserId { get; set; }
 public int TenantId { get; set; }
 public virtual ICollection Interests { get; set; }

Можно ли как-то изменить эти свойства навигации для выполнения запросов, специфичных для арендатора? Или я должен пойти и вырвать все свойства навигации в пользу рукописного кода?

Второй вариант пугает меня, потому что многие запросы имеют вложенные Включения. Любой вклад здесь будет фантастическим.

Ответы на вопрос(2)

Ваш ответ на вопрос