Получите контекстное подключение и используйте его как соединение в другом месте

Я работаю в среде, в которой корпоративное хост-приложение вызывает клиентские приложения с реализованным COM-интерфейсом через ProgID. Это способ, которым программисты хост-приложения позволяют улучшить приложение с помощью плагинов.

Host app <-> COM interface <-> Client app

Клиентское приложение может использовать методы из предоставленного COM-интерфейса.

Одним из таких методов является RunSqlQuery(rawSqlQuery). Он имеет возможности полностью взаимодействовать с SQL в рамках зарегистрированного пользователя хост-приложения (на основе типа аутентификации подключения он может быть пользователем Windows или SQL).

Я ищу способ получить текущий контекст соединения, который был запущен из главного приложения и использовать его как соединение для DbContext.

Зачем?

  1. Я хочу использовать ORM для привязки данных, привязки параметров, смены трекера и т.д.
  2. Я могу использовать свое собственное явное SQL-соединение для него, но с моим собственным SQL-соединением я не добираюсь до локальных временных таблиц, которые создаются в хост-приложении с самого начала. Хост-приложение сильно полагается на хранимые процедуры, которые, в свою очередь, работают с указанными локальными временными таблицами
  3. В случае использования явного SQL-соединения (основное соединение с SQL-сервером содержит хост-приложение) мне нужно управлять учетными данными подключения в строке подключения (когда не разрешен смешанный режим проверки подлинности SQL-сервера)

Для ясности, где проблема, что-то подобное хорошо известно в мире CLR SQL:

В SQL CLR UDF есть возможность использовать context connection=true как строку соединения, например, SqlConnection (подробнее здесь).

В ссылке выше они писали:

Соединение находится в другом сеансе базы данных, чем хранимая процедура или функция, у него могут быть разные параметры SET, он находится в отдельной транзакции, он не видит ваши временные таблицы и т.д.

И в других местах в этой ссылке:

Вероятно, вы хотите, чтобы хранимая процедура или функция выполнялись в контексте этого соединения, а также транзакции, параметры SET и т.д. Это называется контекстным соединением.

Ответ 1

Если вы работаете в ядре asp.net, вам просто нужно настроить строку соединения в файле appsettings.json. Настройки вашей строки подключения обычно отображаются на хосте. Если вы не можете найти его, просто спросите онлайн-консультанта о вашей строке подключения. Вот как я решил свою проблему с подключением, когда у меня были подобные проблемы с подключением

appsettings.json

"ConnectionStrings": { DefaultConnection": "Here_is_the_connectionstringSettings_that_is_given_by_your_host"}