У меня есть один объектный объектный фреймворк, и когда я добавляю его в свой проект, connectionstring
он добавляется app.config
в connectionstring
раздел, но когда я хочу создать новый entitycontext
и использовать его connectionstring
, появляется эта ошибка
entity-framework
entity-framework-4
user421413
источник
источник
Ответы:
Я подозреваю, что ваша проблема проистекает из того факта, что у вас есть более одного проекта в вашем решении, и тот, который содержит материал вашей структуры сущностей, включая
edmx
файлы, НЕ является стартовым проектом решений. В этом случае, даже если строка подключения существует в проекте EFapp.config
, CLR все равно не может найти ее во время выполнения. Например, если у вас есть веб-сайт и проект EF в вашем решении, вам необходимо скопировать строку подключения из проекта EFapp.config
на ваш веб-сайтweb.config
. По сути, любые данные строки подключения должны существовать в файле конфигурации проекта, из которого инициируются потоки .Net с помощью CLR (т. Е. Вашего запускаемого проекта). Если это не ваш случай, просто откройтеedmx
файл, щелкните правой кнопкой мыши на его поверхности, выберите свойства, скопируйте строку подключения и вставьте ее вapp.config
раздел «Строка подключения». Таким образом, вы можете убедиться, что у вас есть правильный в вашей конфигурации.РЕДАКТИРОВАТЬ:
Как вы можете видеть здесь в документации по конструктору ObjectContext , первый параметр - это имя строки соединения, которая является кодом, сгенерированным во время создания вашего EDM. Если каким-то образом имя вашей строки подключения случайно изменится, все, что вам нужно сделать, это щелкнуть правой кнопкой мыши по вашей модели и выбрать «Обновить модель из базы данных ...», а затем следуйте указаниям мастера, чтобы обновить конфигурацию и конструктор, чтобы отразить это. изменение.
источник
Вам необходимо скопировать строку подключения в app.config в ваш web.config или скопировать весь файл в проект, который отображает вывод. Это одно из условий потребления фреймворка.
источник
Я столкнулся с этой проблемой, когда попытался поместить свою собственную логику базы данных в .dll для использования несколькими проектами в моем решении.
В то время как у .dll был правильный файл app.config, он не работал. Платформа сущностей хотела получить информацию о соединении в файле app.config .exe. Копирование информации туда работало просто отлично.
Решение Мортезы о вставке строки подключения непосредственно в .edmx не сработало для меня, так как не позволило мне вставить туда значение - хотя именно это я и хотел сделать.
источник
Привет, у меня была эта проблема, и это сводило меня с ума. Во всяком случае, наконец, я понял, в чем проблема. Первое, что вам нужно сделать, это убедиться, что
connectionstrings
вapp.config
иweb.config
одинаковы. Затем вы должны дважды щелкнуть.edmx
файл, чтобы увидеть таблицы. Как только вы нажмете где-нибудь рядом с таблицами, но не на таблицы и перейдите к свойствам. В раскрывающемся списке выберитеConceptualEntityModel
и найдите имя контейнера сущностей и хорошо его запомните.Затем перейдите к конструктору файла edmx и откройте конструкторы. (конструктор - это подпапка файла edmx) конструкторы должны иметь два параметра в параметре BASE
Это одна из них. первый параметр должен иметь имя файла проекта, в котором он
.edmx
находится. Второй параметр должен иметь имя имени контейнера сущности из свойств, о которых я упоминал ранее. не забудьте расположить все конструкторы с помощью:base("", "")
По крайней мере, это была моя проблема, и моя проблема была решена таким образом. Я надеюсь, что вам удастся решить вашу, как это.
источник
У меня была вариация на эту тему, которую никто, казалось, не освещал.
У меня был основной проект с парой моделей и тестовый проект, содержащий юнит-тесты. Тестовый проект работал, но затем остановился с ошибкой, упомянутой в ОП. Я не делал переименования или перемещения файла EDMX.
В большинстве советов упоминалось сравнение файлов .config, но в моем проекте их вообще не было.
В конце я скопировал файл app.config из основного проекта в свой тестовый проект, и тогда он заработал. Является ли это правильным шагом или будет представлять проблемы с ремонтопригодностью при добавлении дополнительных моделей, я не знаю, но по крайней мере мои модульные тесты теперь снова работают правильно.
источник
Хотя ответ Мортезы Манави действительно решает эту проблему, другое решение заключается в динамическом построении строки подключения и передаче ее в конструктор для вашего ObjectContext:
Это избавляет от необходимости копировать информацию строки подключения в app.config вашего запускаемого проекта, что, по крайней мере, в моем случае, было нежелательно.
источник
Я забыл добавить providerName = "System.Data.EntityClient" в качестве атрибута в строке подключения. Это привело к этой ошибке, так
вместо того
источник
Я только что обнаружил, что если приложение будет создано в IIS из VS2010 на двух уровнях от корня веб-сайта, эта ошибка произойдет. Не уверен, почему это происходит, нужно будет расследовать больше. Например, если ваше приложение находится по этому пути:
/admin/advertiser
ошибка появится, если/admin
на вашем сайте IIS нет виртуального каталога.Все, что я сделал, это создал пустой
admin
каталог, в котором моя.../intepub/wwwroot
ошибка исчезла.Вы обнаружите, что не сможете начать отладку, пока не выполните шаг выше.
У нас была эта проблема в нашей команде в прошлом, потребовалось некоторое время, чтобы вспомнить, но именно это мы и исправили раньше.
источник
Я использую более позднюю архитектуру и получил ту же проблему, но эта поможет мне. Надеюсь, это поможет вам. Сначала у вас есть то же самое
connection string
,libraries
где вы можете получить доступ к БД, как в,app.config
иweb.config
после этого вы просто добавляете перегруженный конструктор в файл .edmx (Model.context.cs), что теперь у вас есть два конструктора, один по умолчанию, а другой, который вы только что добавили ( перегружена).источник
У меня была библиотека классов, которая тоже не хотела работать с EF. После того, как я скопировал app.config (или просто раздел строки соединения) из моей библиотеки классов в exe-проект, соединение заработало нормально! Вероятно, файл конфигурации должен находиться в той же папке, что и exe-проект, и поэтому не был найден. Поэтому всегда будьте особенно осторожны, когда файл конфигурации используется в проекте библиотеки классов!
источник
Ну ... эта проблема может быть также по очень простой (глупой) причине ... Я скопировал файл из другого проекта и забыл изменить ConnectionString на EntityDataSource ... как я был в начале проекта и случилось на странице входа в систему я подумал, что это что-то в конфиге, но это было просто неправильное имя строки подключения (и DefaultContainerName).
источник