Рассмотрим большие офисные телефонные системы:
В моем офисе установлена внутренняя телефонная система. Но у каждого телефона также есть внешний номер телефона (виртуальные номера, которые используют одну из группы реальных линий TELCO). Я могу позвонить в другой офис, набрав их добавочный номер напрямую, и звонок будет направлен через нашу внутреннюю телефонную систему (один переход). В качестве альтернативы я мог бы набрать общедоступный номер этого телефона, и вызов перенаправляется из системы здания в коммутационный пункт TELCO, затем обратно через систему здания, а затем в добавочный номер офиса (3 перехода).
Первое соединение SQL ведет себя так же, как и любое стандартное соединение SQL при подключении к серверу, указанному в строке соединения. Новое соединение создается с использованием стандартного собственного соединения SQL. Это ведет себя как набор полного общедоступного номера телефона другого офисного телефона. Конечно, вы подключаетесь к локальной машине, но соединение маршрутизируется по-другому.
У контекстного соединения есть новый экземпляр SqlConnection, использующий существующее соединение, которое выполняет объект SQLCLR. Он использует существующий / локальный контекст. Это похоже на набор номера моего офисного напарника напрямую. Локальный контекст и более эффективный.
Хотя я не уверен, но считаю, что при использовании контекстного соединения вызовы объектов SQLCLR также участвуют в транзакции контекста. Кто-нибудь, пожалуйста, поправьте меня, если я ошибаюсь.
Peter