Проблема строки соединения Entity Framework - PullRequest
8 голосов
/ 18 октября 2010

Я делаю небольшую библиотеку (DLL) для управления пользователями и их ролями / привилегиями. План состоит в том, чтобы иметь возможность добавить эту dll в проект MVC и иметь возможность манипулировать пользователями / ролями / и т.д. Все данные хранятся в базе данных SQL.

Я использую платформу для доступа к данным.

Поэтому, когда я инициализирую новый RoleManager (это имя основного класса в создаваемой мной библиотеке), я добавляю в него строку подключения следующим образом:

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 ]

8 голосов
/ 19 октября 2010

Просто скопируйте информацию строки подключения из файла конфигурации DLL в исполняемый файл конфигурации.

6 голосов
/ 19 октября 2010

Обычно вы пытаетесь создать экземпляр ObjectContext через этот ObjectContext Constructor (String) без передачи строкового параметра в его ожидаемомформат и в этом проблема.
Вот что вам нужно сделать:

1. Сначала создайте запись в своем файле app.config своего «тестового проекта», потому что это место, в котором CLR ищет строку подключения.во время выполнения.

<code><configuration>
  <connectionStrings>
    <add name="RoleManagerEntities" connectionString="metadata=res://<em>/RoleManager.csdl|res://</em>/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");
0 голосов
/ 19 октября 2010

Я не эксперт по EF, но я не думаю, что строка подключения действительна.Попробуйте:

metadata=res://*;provider=System.Data.SqlClient;provider connection string='Data Source=localhost;Initial Catalog=Login;Integrated Security=True;Connection Timeout=60; multipleactiveresultsets=true'
0 голосов
/ 19 октября 2010

Конструктор может искать строку подключения в настройке connectionStrings вашего web.config с именем, которое вы передаете в качестве параметра.

Так что если вы вызываете:

db = new RoleManagerEntities("Foobar");

Он ищет:

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

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