DbContext将如何从连接池中提供连接实例?



我们正在使用asp.net core 3。EF Core 3.x

我们确实对几个实体进行了授权(因此它只允许表中的少数记录作为响应返回),这是通过访问SQL视图(内部连接两个表)实现的,我们对该视图进行查询,该视图将只给您登录用户授权的记录。

为了实现这一点,我们需要在执行select查询(在应用程序表上)之前将登录的用户id和@@spid(SQL Server)插入表(会话)(在上述视图中使用),并且我们需要在执行查询后立即删除该记录。为了达到这个目的,我们使用DbInterceptor

会话表:

tbody> <<tr>2
userIdsessionId
132
26

ReaderExecutedAsync时,数据读取器仍然打开并读取行。所以现在取消用户设置还为时过早。试试钩住DataReaderDisposing

如果这不起作用,强制打开连接并在拦截器外部调用该过程。如

var con = db.Database.GetDbConnection();
await con.OpenAsync();
await con.Database.ExecuteSqlRawAsync("EXEC InsertUserSP @UserId", sqlParameter);

这将确保在DbContext被处置之前,连接不会返回到连接池。

相关内容

  • 没有找到相关文章

最新更新