EF и POCO. Как правильно настроить мой проект - PullRequest
0 голосов
/ 02 октября 2011

Недавно я начал работать с EF 4.1 в .NET и имел некоторый положительный опыт до сегодняшнего дня, когда я пытался создать свой собственный проект (пока я работал над проектами, начатыми кем-то другим).

Эта штука просто не хочет работать из коробки. Я не делаю ничего особенного. Вообще-то, сначала это сработало, потом перестало работать из ниоткуда, и теперь, после 4 часов напрасной траты времени, я пишу этот пост.

Мое решение состоит из 3 проектов:
WebApp (где живет мое приложение)
DataAccess
BusinessObjects

DataAccess содержит файлы EntityModel.edmx и EntityModel.Context.tt.
BusinessObjects содержит EntityModel.tt со всеми базовыми объектами. Я использовал генератор ADO.NET DbContext для генерации объектов.
Для пространства имен для EntityModel.Context.tt задано значение BusinessObjects.

WebApp и DataAccess ссылаются на проект BusinessObjects. BusinessObjects не ссылается ни на что.

(Полагаю, я все правильно настроил. EntityModle.tt может видеть файл edmx и объекты создаются при редактировании файла.)

Итак, на данный момент проекты компилируются без ошибок.

На следующем шаге я добавляю EntityDataSource на свою страницу default.aspx, и после выбора соединения в конфигурации источника данных (одно из файла web.config) я получаю сообщение об ошибке: Метаданные, указанные в этой строке соединения, не могут быть загружен. Рассмотрим перестройку веб-проекта ... Невозможно загрузить указанный ресурс метаданных.

Раньше у меня была такая проблема, когда я что-то неправильно писал в строке подключения, менял название модели или подобное, но теперь я ничего не делал. Я воссоздал файл edmx и его POCO несколько раз, убедившись, что скопировал строку подключения из app.config. Это просто не работает.

Любая помощь приветствуется. Спасибо.

1 Ответ

0 голосов
/ 02 октября 2011

Вам нужно изменить строку подключения в вашем файле web.config следующим образом:

connectionString="metadata=res://*/;provider=System.Data.SqlClient;provider...etc...

В основном: метаданные = res: // * / ; попытается найти встроенные файлы метаданных (csdl, msl, ssdl) во всех ссылочных сборках в проекте, и вам повезет с поиском встроенных ресурсов, созданных как артефакты файла edmx.

Надеюсь, это поможет.

...