Entity Framework Core Row Level Security с использованием SESSION_CONTEXT

Я пишу мультитенантное приложение с использованием Row Level Security, использующее ASP.NET Core и Entity Framework 7 (Core). Поскольку моя база данных размещена на Microsoft SQL Server, я использовалэтот метод для обеспечения соблюдения RLS.

Теперь все, что мне нужно, это установить желаемый tenant_id в SESSION_CONTEXT.

Первой проблемой, с которой я столкнулся, было выполнение хранимой процедуры с использованием EF7. Решение, кажется, будет:

var resp = context.Set<SessionVars>().FromSql(
          "EXECUTE sp_set_session_context @key = N'my_tenant', @value = {0};
           SELECT * FROM mySessionVars", desiredTenant).ToList();

Используя приведенную выше команду, я ясно вижу, что SESSION_CONTEXT успешно установлен. Теперь я ожидаю увидеть, что следующие запросы в том же контексте фильтруются в соответствии с клиентом, который я установил в SESSION_CONTEXT.

int visibleRows = context.MyModel.ToList().Count;

К сожалению, результаты не такие, как ожидалось. Он ведет себя так, как будто строки были получены до того, как был установлен SESSION_CONTEXT.

Это вызвано нетерпеливой загрузкой EF7? EF7 использует обналиченные данные? Как я могу преодолеть это?

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

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

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