我们正在使用asp.net core 3。EF Core 3.x
我们确实对几个实体进行了授权(因此它只允许表中的少数记录作为响应返回),这是通过访问SQL视图(内部连接两个表)实现的,我们对该视图进行查询,该视图将只给您登录用户授权的记录。
为了实现这一点,我们需要在执行select查询(在应用程序表上)之前将登录的用户id和@@spid
(SQL Server)插入表(会话)(在上述视图中使用),并且我们需要在执行查询后立即删除该记录。为了达到这个目的,我们使用DbInterceptor
。
会话表:
userId | sessionId | 1 | 32 | 2
---|---|
26 |
在ReaderExecutedAsync
时,数据读取器仍然打开并读取行。所以现在取消用户设置还为时过早。试试钩住DataReaderDisposing
。
如果这不起作用,强制打开连接并在拦截器外部调用该过程。如
var con = db.Database.GetDbConnection();
await con.OpenAsync();
await con.Database.ExecuteSqlRawAsync("EXEC InsertUserSP @UserId", sqlParameter);
这将确保在DbContext被处置之前,连接不会返回到连接池。