Подтвердить что ты не робот

Перемещение модели Entity Framework в библиотеку классов из веб-проекта

Я использую Entity Framework и недавно пришел к пониманию преимуществ использования вашей модели EF в другом проекте в рамках одного и того же решения, чтобы я мог создавать из него несколько пользовательских интерфейсов.

Я переместил его в новый проект библиотеки классов и обновил все ссылки на объекты в веб-проекте, чтобы использовать новую DLL, сгенерированную проектом. Все прошло гладко, за исключением одной маленькой хватки. Когда я переместил EF на новый проект, он каким-то образом все еще читал строку подключения из web.config в веб-проекте (не спрашивайте меня, потому что у меня нет подсказки).

Я использовал "Обновить модель из базы данных" в дизайнере EF и не нашел строку подключения (как я и ожидал после ее переноса в новый проект), поэтому я использовал мастер для создания новой строки подключения, сделал просто отлично. Новая строка подключения теперь находится в приложении App.config в рамках проекта библиотеки классов. Строка подключения в окне свойств теперь корректна, и дизайнер читает ее из App.Config. Я пошел вперед и удалил строку подключения из Web.Config в веб-проекте.

Теперь при запуске приложения появляется следующая ошибка:

Указанное именованное соединение либо не находится в конфигурации, не предназначено для использования с поставщиком EntityClient, либо недействительно.

Если я вставляю строку подключения обратно в Web.Config, все работает отлично. Я не хочу создавать новую EF-модель с нуля, потому что это довольно сложная модель, и я сделал много реструктуризации после того, как вытащил из БД. Я вылил полученный CS файл, а также XML в файл edmx и не нашел ничего полезного. Буду признателен за любую оказанную помощь. Очевидно, пока, пока не выясню это, я просто оставляю строку подключения в web.config, поскольку по какой-либо причине это работает.

4b9b3361

Ответ 1

Это по дизайну; в то время как файл конфигурации в библиотеке классов используется разработчиком, файл конфигурации фактического приложения - это то, что будет использоваться во время выполнения. Независимо от того, что этот Web.config для проекта ASP.NET или App.config для проекта Winforms или WPF, это файл конфигурации приложения (или что-то более высокое, например Machine.config), которое будет использоваться; файл в библиотеке классов не является частью приложения.

Если вы пытаетесь предоставить EF-модель, которая будет работать без указания строки подключения в файле приложения или веб-конфигурации, вам придется сохранить строку подключения каким-либо другим способом (вы всегда можете быть жестким, code it) и передать его в соответствующую перегрузку вашего конструктора контекста.

Мое решение обычно заключается в предоставлении статической функции без параметров в самом контексте, который вызывает эту перегрузку с соответствующей строкой соединения.