Я пытаюсь перенести веб-приложение из ASP.NET 4.5 в ASP.NET 5/MVC 6 (бета-версия 8).Строка подключения не видна из библиотеки классов ссылок
Приложение состоит из WebApp и библиотеки классов, которая инкапсулирует доступ к БД. В моем новом решении библиотека классов имеет тип Библиотека классов (пакет).
Уровень доступа DB (библиотека классов) пытается найти строку соединения с именем MyConnection. В моем старом приложении ASP.NET 4.5 я использовал эту строку соединения в web.config WebApp. Как-то эта конфигурация нашла путь к моей библиотеке классов, чтобы моя библиотека классов могла получить доступ к строке соединения, определенной в WebApp.
Теперь с ASP.NET 5 Я аналогично пытался определить строку подключения в appsettings.json так:
{
"ConnectionStrings": {
"MyConnection": "server=localhost\\SQLEXPRESS;database=MyDb;Integrated Security=True"
}
}
Но во время выполнения я получаю следующее сообщение об ошибке:
Can't find a connection string with the name 'MyConnection'
Таким образом, в отличие от старого ASP.NET, здесь конфигурация, похоже, не подходит для ссылочной библиотеки классов.
Как я могу убедиться, что моя строка подключения видна из моей библиотеки классов?
вам необходимо создать класс для настройки строки подключения, а при запуске вы привязываете класс из appsettings.json, и вам нужно вставить его в свою библиотеку классов, подобную этому вопросу о секретах пользователя, где есть другое место, которое вы могли бы поставить вашей строки подключения. Статический доступ к настройкам конфигурации больше не существует. http://stackoverflow.com/questions/32599573/how-do-i-inject-asp-net-5-vnext-user-secrets-into-my-own-utility-class/32608820#32608820 –
Спасибо за ваш вклад , Но при таком подходе невозможно будет получить доступ к этим данным с помощью 'ConfigurationManager.ConnectionStrings [...]', правильно? Дело в том, что я использую стороннюю библиотеку, которая пытается получить доступ к строке подключения на основе ее имени таким образом ... –
Хорошо, что сторонняя библиотека также имеет конструктор, который принимает ConnectionString и ProviderName, а не имя ConnectionStringName. Теперь я передаю эти два значения, используя механизм, описанный в вашей ссылке. Это помогло - большое спасибо! –