Проблема строки соединения Entity Framework
Я делаю небольшую библиотеку (DLL) для управления пользователями и их ролями / привилегиями. План состоит в том, чтобы иметь возможность добавить эту dll в проект MVC и иметь возможность манипулировать пользователями / ролями / и т.д. Все данные хранятся в базе данных SQL.
Я использую сущность для доступа к данным.
Поэтому, когда я инициализирую новый RoleManager(это имя основного класса в библиотеке, которую я создаю), я добавляю в него connectionString примерно так:
RoleManager roleManager = new RoleManager(string connectionString);
Затем внутри конструктора я делаю это:
db = new RoleManagerEntities(connectionString); //This is the EntityFramework
И я пытаюсь предоставить эту строку подключения (среди многих других)
"metadata=res://*/RoleManager.csdl|res://*/RoleManager.ssdl|res://*/RoleManager.msl;provider=System.Data.SqlClient;provider connection string='Data Source=localhost;Initial Catalog=Login;Integrated Security=True;Connection Timeout=60; multipleactiveresultsets=true'"
И я получаю следующую ошибку:
The specified named connection is either not found in the configuration, not intended to be used with the EntityClient provider, or not valid.
Этот вопрос является результатом того, что я пытался создать экземпляр EF из моего нового проекта, не предоставляя строку подключения и не имея ничего внутри конфигурации моего приложения, чтобы он по умолчанию был. Жаль, что я не могу удалить это сейчас.
4 ответа
Просто скопируйте информацию о строке подключения из файла конфигурации DLL в исполняемый файл конфигурации.
По сути, вы пытаетесь создать экземпляр ObjectContext через этот конструктор ObjectContext (String), не передавая строковый параметр в ожидаемом формате, и в этом проблема.
Вот что вам нужно сделать:
1. Сначала создайте запись в своем файле app.config в "тестовом проекте", потому что это место, в котором CLR ищет строку подключения во время выполнения.
<configuration>
<connectionStrings>
<add name="RoleManagerEntities" connectionString="metadata=res:///RoleManager.csdl|res:///RoleManager.ssdl|res://*/RoleManager.msl;provider=System.Data.SqlClient;provider connection string='Data Source=localhost;Initial Catalog=Login;Integrated Security=True;Connection Timeout=60; multipleactiveresultsets=true'" />
</connectionStrings>
</configuration>
2. Теперь измените код для передачи имени строки подключения вместо фактической строки подключения:
db = new RoleManagerEntities("name=RoleManagerEntities");
Я не эксперт по EF, но я не думаю, что строка подключения является действительной. Пытаться:
metadata=res://*;provider=System.Data.SqlClient;provider connection string='Data Source=localhost;Initial Catalog=Login;Integrated Security=True;Connection Timeout=60; multipleactiveresultsets=true'
Конструктор может искать строку подключения в настройке connectionStrings вашего web.config с именем, которое вы передаете в качестве параметра.
Так что если вы позвоните:
db = new RoleManagerEntities("Foobar");
Он ищет:
Я не уверен, что это решение, но, похоже, это сообщение об ошибке.