Получите контекстное подключение и используйте его как соединение в другом месте
Я работаю в среде, в которой корпоративное хост-приложение вызывает клиентские приложения с реализованным COM-интерфейсом через ProgID. Это способ, которым программисты хост-приложения позволяют улучшить приложение с помощью плагинов.
Host app <-> COM interface <-> Client app
Клиентское приложение может использовать методы из предоставленного COM-интерфейса.
Одним из таких методов является RunSqlQuery(rawSqlQuery)
. Он имеет возможности полностью взаимодействовать с SQL в рамках зарегистрированного пользователя хост-приложения (на основе типа аутентификации подключения он может быть пользователем Windows или SQL).
Я ищу способ получить текущий контекст соединения, который был запущен из главного приложения и использовать его как соединение для DbContext.
Зачем?
- Я хочу использовать ORM для привязки данных, привязки параметров, смены трекера и т.д.
- Я могу использовать свое собственное явное SQL-соединение для него, но с моим собственным SQL-соединением я не добираюсь до локальных временных таблиц, которые создаются в хост-приложении с самого начала. Хост-приложение сильно полагается на хранимые процедуры, которые, в свою очередь, работают с указанными локальными временными таблицами
- В случае использования явного 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"}