. NET Core Azure Function and Entity Framework 6 неправильно интерпретирует ConnectionStrings из local.settings. json - PullRequest
1 голос
/ 29 апреля 2020

У меня есть библиотека. 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 и как я могу решить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...