Перемещение модели Entity Framework в библиотеку классов из веб-проекта - PullRequest
17 голосов
/ 09 февраля 2011

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

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

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

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

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

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

1 Ответ

21 голосов
/ 09 февраля 2011

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

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

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

...