У меня есть библиотека. NET 4.x, на которую ссылаются как веб-приложение ASP. NET 4.x, так и функция. NET Core 3.x Azure. В этой библиотеке находится производный от EF6 класс DbContext с конструктором, подобным следующему:
public MyContext() : base("DefaultConnection") { }
И, конечно, есть строка ConnectionConnection, определенная в web.config веб-приложения dotnet4. Эта строка подключения указывает на локальный экземпляр SQL Express и выглядит следующим образом:
<add name="DefaultConnection" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=MyDatabase;Integrated Security=True;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" />
Отлично работает, всегда имеет.
Теперь у нас есть функция Azure который мы пытаемся проверить на месте. Раздел ConnectionStrings в local.settings. json выглядит следующим образом:
"ConnectionStrings": {
"DefaultConnection": "Data Source=.\\SQLEXPRESS;Initial Catalog=MyDatabase;Integrated Security=True;MultipleActiveResultSets=True"
}
Я также пробовал строго типизированные версии ConnectionString, явно определяя ConnectionString и ProviderName отдельно, но безрезультатно.
Проблема, с которой я сталкиваюсь, заключается в том, что при работе в контексте Azure Function / в общем случае под dotnetcore строка соединения names не распознается при передаче в конструктор, а вместо этого рассматриваются как каталог по умолчанию. Это строка соединения, которую в конечном итоге придумывает функция:
"Data Source=(localdb)\\mssqllocaldb;Initial Catalog=DefaultConnection;Integrated Security=True;MultipleActiveResultSets=True"
... несмотря на отсутствие ссылки на localdb где-либо в кодовой базе. Если я изменю конструктор DbContext на это:
public MyContext() : base("RatFink") { }
Строка подключения, используемая контекстом:
"Data Source=(localdb)\\mssqllocaldb;Initial Catalog=RatFink;Integrated Security=True;MultipleActiveResultSets=True"
Если я передам фактическую строку подключения в вызов base()
оно распознается как таковое, и все работает, как и ожидалось, но для этого требуются изменения кода в указанной библиотеке, что не идеально.
Почему имя строки подключения не распознается и не читается из local.settings. json в контексте Azure Function /. NET Core и как я могу решить?