ef core - мультитенантность с использованием глобальных фильтров - PullRequest
0 голосов
/ 03 мая 2019

OnModelCreating вызывается один раз для контекста БД. Это проблема, поскольку идентификатор клиента устанавливается для каждого запроса.

Как мне переконфигурировать глобальный фильтр каждый раз, когда я создаю новый экземпляр dbcontext?

Если я не могу использовать глобальный фильтр, каков альтернативный способ?

Обновление:

Мне нужно было предоставить универсальный фильтр с выражением типа e => e.TenantId == _tenantId. Я использую следующее выражение:

var p = Expression.Parameter(type, "e");
Expression.Lambda(
    Expression.Equal(
        Expression.Property(p, tenantIdProperty.PropertyInfo),
        Expression.Constant(_tenantId))
    p);

Поскольку это выполняется один раз, _tenantId исправлен. Поэтому, даже если я обновлю его, первое значение будет записано в выражении linq.

Итак, мой вопрос, как правильно установить правильную сторону этого равенства.

1 Ответ

0 голосов
/ 03 мая 2019

Это исправлено следующим выражением как правильное выражение

Expression.MakeMemberAccess(
    Expression.Constant(this, baseDbContextType),
    baseDbContextType.GetProperty("TenantId")

Я использую базовый класс для всех моих контекстов БД. GetProperty() работает как есть, потому что TenantId является публичной собственностью.

...