sql-server – 为什么我的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仍然关闭,这就是导致连接重置的原因. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |