Linq to SQL DataContext
на самом деле не удерживает соединение открытым, когда вы выполняете запросы, используя понимание запросов или ExecuteQuery
/ ExecuteMethod
вызов, и CONTEXT_INFO
живет только в контексте одного соединения.
Чтобы это работало, вам нужно вручную открыть соединение на DataContext
с помощью context.Connection.Open()
перед установкой context_info. Как только соединение уже открыто, последующие запросы не будут автоматически закрывать соединение, когда они завершены.
Примечание. Техническая причина этого заключается в том, что он вызывает ExecuteReader
для IDbCommand
с набором CommandBehavior.CloseConnection
, если только соединение не было открыто. Вы можете сами увидеть то же поведение, если используете SqlCommand
/ IDbCommand
объекты с одинаковым установленным флагом.
Редактировать. Думаю, мне следует также указать, что если соединение объединено в пул, технически физическое соединение все время "открыто", но IDbConnection
все еще закрывается, что и приводит к сбросу соединения. 1019 *