加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – 为什么我的CONTEXT_INFO()为空?

发布时间:2020-12-12 07:25:42 所属栏目:MsSql教程 来源:网络整理
导读:我有一个方法来设置我的 linq数据上下文.在它返回DC之前,它调用存储过程来设置CONTEXT_INFO值以识别当前用户. 触发器会获取所做的任何更改,并使用此上下文数据写入审核记录. 我注意到我的上下文数据在审计表空白中,所以我写了一个简单的单元测试来逐步完成这
我有一个方法来设置我的 linq数据上下文.在它返回DC之前,它调用存储过程来设置CONTEXT_INFO值以识别当前用户.

触发器会获取所做的任何更改,并使用此上下文数据写入审核记录.

我注意到我的上下文数据在审计表空白中,所以我写了一个简单的单元测试来逐步完成这个过程,我仍然一无所获.但是,如果我将所有Linq-To-SQL语句粘贴到查询窗口中,那么上下文数据就在那里.

查看分析器跟踪,它会在此过程中进行相当多的sp_reset_connection调用.我已经明白这些不应该对CONTEXT_INFO值产生影响.

那么这里发生了什么?

解决方法

执行查询时,Linq to SQL DataContext实际上不会保持连接打开,使用查询理解或ExecuteQuery / ExecuteMethod调用,并且CONTEXT_INFO仅存在于单个连接的上下文中.

为了使其工作,您需要在设置context_info之前使用context.Connection.Open()在DataContext上手动打开连接.连接已打开后,连续查询将不会在连接完成后自动关闭连接.

注意 – 技术原因是它在IDbCommand上调用ExecuteReader并设置了CommandBehavior.CloseConnection,除非连接已经打开.如果使用具有相同标志集的SqlCommand / IDbCommand对象,则可以自己查看相同的行为.

编辑 – 我想我还应该指出,如果连接是汇集的,从技术上讲,物理连接始终“打开”,但IDbConnection仍然关闭,这就是导致连接重置的原因.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读