Chr*_*son 7 sql-server asp.net-mvc linq-to-sql
我有一个方法来设置我的linq数据上下文.在它返回DC之前,它调用存储过程来设置CONTEXT_INFO值以识别当前用户.
触发器会获取所做的任何更改,并使用此上下文数据写入审核记录.
我注意到我的上下文数据在审计表中是空白的,所以我写了一个简单的单元测试来逐步完成这个过程,我仍然一无所获.但是,如果我将所有Linq-To-SQL语句粘贴到查询窗口中,那么上下文数据就在那里.
查看分析器跟踪,它会在此过程中进行相当多的sp_reset_connection调用.我已经明白这些不应该对CONTEXT_INFO值产生影响.
那么这里发生了什么?
DataContext当您使用查询理解或ExecuteQuery/ ExecuteMethod调用执行查询时,Linq to SQL 实际上不会保持连接打开,并且CONTEXT_INFO只存在于单个连接的上下文中.
为了得到这个工作,你需要手动打开的连接DataContext使用context.Connection.Open()设置CONTEXT_INFO之前.连接打开后,连续查询将不会在连接完成后自动关闭连接.
注意 - 技术原因是它ExecuteReader在IDbCommandwith CommandBehavior.CloseConnectionset 上调用,除非连接已经打开.如果使用具有相同标志集的SqlCommand/ IDbCommand对象,则可以自己查看相同的行为.
编辑 - 我想我还应该指出,如果连接是汇集的,从技术上讲,物理连接在整个时间内是"开放的",但IDbConnection仍然会关闭,这就是导致连接重置的原因.
| 归档时间: |
|
| 查看次数: |
2162 次 |
| 最近记录: |