Проблема строки соединения 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");

Он ищет:

Я не уверен, что это решение, но, похоже, это сообщение об ошибке.

Другие вопросы по тегам