Указанное именованное соединение либо не находится в конфигурации, не предназначено для использования с поставщиком EntityClient, либо недействительно
У меня есть один объект фреймворка сущности, и когда я добавляю его в свой проект, entitycontext
connectionstring
добавляется в app.config
в секции connectionstring
, но когда я хочу создать новый entitycontext
и использовать эту entitycontext
connectionstring
, появляется эта ошибка
- Как преобразовать DbSet в инфраструктуру Entity в ObjectQuery
- Тайм-ауты структуры организации
- Преобразование String в Int в EF 4.0
- Почему структура Entity Framework не может видеть информацию о столбце хранимой процедуры?
- Как добавить проверку на мои classы POCO (шаблон)
- Как реализовать Единицу работы, которая работает с EF и NHibernate
- Уже есть открытый DataReader, связанный с этой Командой, который должен быть закрыт первым
- Указанный член типа не поддерживается в LINQ to Entities. Поддерживаются только инициализаторы, сущности и свойства навигации сущности
Я подозреваю, что ваша проблема исходит из того факта, что в вашем решении есть несколько проектов, и тот, который содержит фреймворк сущности, включая файлы edmx
НЕ является проектом запуска решений. В этом случае, даже если строка соединения существует в проекте EF app.config
, все еще CLR не может найти ее во время выполнения. Например, если в вашем решении есть веб-сайт и проект EF, вам необходимо скопировать строку подключения из приложения app.config
проекта EF в web.config
вашего веб-сайта. В принципе, любые данные строки соединения должны существовать в файле конфигурации проекта, который streamи .Net инициируются с помощью CLR (т. Е. Вашего проекта запуска). Если это не ваше дело, просто откройте свой файл edmx
, щелкните правой кнопкой мыши на его поверхности, выберите свойства и скопируйте строку подключения и вставьте ее в свой раздел Connection String приложения.config. Таким образом, вы можете убедиться, что у вас есть правильный вариант в вашей конфигурации.
РЕДАКТИРОВАТЬ:
Как вы можете видеть здесь, в Documenation ObjectContext Constructor , первым параметром является имя соединительной строки, которое является кодом, созданным во время создания вашего EDM. Если каким-то образом имя вашего имени соединительной строки должно быть изменено, все, что вам нужно сделать, это щелкнуть правой кнопкой мыши на вашей модели и выбрать «Обновить модель из базы данных …», затем следовать мастеру, чтобы обновить ваше приложение и конструктор, чтобы отразить это изменение.
Вам нужно скопировать строку подключения в app.config в файл web.config или скопировать весь файл в проект, который отображает вывод. Это одно из условий для использования структуры.
Я столкнулся с этой проблемой, когда попытался поместить мою собственную логику базы данных в .dll для использования несколькими проектами в моем решении.
Хотя .dll имеет правильный файл app.config, он не работает. Структуры Entity хотели получить информацию о соединении в app.config файла .exe. Копирование информации там просто отлично.
Решение Мортезы вставить строку подключения непосредственно в .edmx не сработало для меня, поскольку это не позволило мне вставить значение там, хотя это именно то, что я хотел сделать.
Привет, у меня была эта проблема, и это меня раздражало. В конце концов, я понял, в чем проблема. Первое, что вам нужно сделать, это убедиться, что app.config
connectionstrings
в app.config
и web.config
одинаковы. Затем вы должны дважды щелкнуть файл .edmx
чтобы вы могли видеть таблицы. Как только вы нажимаете где-нибудь рядом с таблицами, но не на таблицах и переходите к свойствам. В раскрывающемся списке выберите ConceptualEntityModel
и найдите имя контейнера Entity и запомните его.
Затем перейдите к разработчику файла edmx и откройте конструкторы. (конструктор – это подпапка файла edmx), конструкторы должны иметь два параметра в параметре BASE
public DBEntities() : base("name=DBEntities", "DBEntities") { this.ContextOptions.LazyLoadingEnabled = true; OnContextCreated(); }
Это одна из них. первый параметр должен иметь имя файла проекта, в котором .edmx
файл .edmx
. Второй параметр должен иметь имя имени контейнера сущности из свойств, о которых я упоминал ранее. не забудьте упорядочить все конструкторы с помощью: base("", "")
По крайней мере, это была моя проблема, и моя проблема была решена именно так. Надеюсь, вам удастся решить ваши, как это.
У меня был вариант, который, казалось, никто не закрывал.
У меня был основной проект с несколькими моделями, а тестовый проект содержал модульные тесты. Проект тестирования работал, но затем остановился с ошибкой, упомянутой в OP. Я не переименовал или не переместил файл EDMX.
Многие советы касались сравнения файлов .config, но моего проекта не было вообще.
В конце концов, я скопировал файл app.config из основного проекта в свой тестовый проект, а затем он сработал. Является ли это правильным шагом или покажет проблемы с ремонтопригодностью при добавлении дополнительных моделей, я не знаю, но по крайней мере мои модульные тесты снова работают правильно.
Хотя ответ Мортезы Манави разрешает эту проблему, другое решение состоит в том, чтобы динамически строить строку соединения и передавать ее в конструктор для объекта ObjectContext:
public static string CreateConnectionString() { var assemblyPath = Assembly.GetExecutingAssembly().Location; string assemblyLocation = Path.GetDirectoryName(assemblyPath); string dbPath = Path.Combine(assemblyLocation, "YourDatabase.sdf"); var sqlBuilder = new SqlConnectionStringBuilder { DataSource = dbPath }; var entityBuilder = new EntityConnectionStringBuilder { ProviderConnectionString = sqlBuilder.ConnectionString, Provider = "System.Data.SqlServerCe.3.5", Metadata = @"res://*/YourModel.csdl| res://*/YourModel.ssdl| res://*/YourModel.msl" }; return entityBuilder.ToString(); } // Snip... var entityContext = new YourObjectContext(CreateConnectionString());
Это устраняет необходимость скопировать информацию строки соединения в app.config вашего проекта запуска, который, по крайней мере, в моем случае, нежелателен.
Я забыл добавить providerName = “System.Data.EntityClient” в качестве атрибута в строке подключения. Это привело к такой ошибке, поэтому
вместо
Я просто обнаружил, что если приложение создано в IIS из VS2010 на двух уровнях от корня веб-сайта, эта ошибка возникнет. Не уверен, почему это происходит, нужно будет исследовать больше. Например, если ваше приложение находится в этом пути: /admin/advertiser
, появится ошибка, если у вас нет /admin
виртуального каталога на вашем сайте IIS.
Все, что я сделал, создано пустым каталогом admin
в моей ошибке .../intepub/wwwroot
.
Вы обнаружите, что вы не сможете начать отладку до тех пор, пока не сделаете шаг выше.
У нас была эта проблема в нашей команде в прошлом, это заняло некоторое время, чтобы помнить, но это было именно то, как мы ее исправили и раньше.
У меня была библиотека classов, которая тоже не хотела работать с EF. После того, как я скопировал app.config (или только раздел строки подключения) из моего classа libraray в проект exe, соединение работало нормально! Вероятно, файл конфигурации должен находиться в той же папке, что и проект exe, и поэтому не был найден. Поэтому всегда будьте дополнительными предупреждениями, когда файлы конфигурации используются в проекте библиотеки classов!
Я использую архитектуру n’tier и получаю ту же проблему, но это помогает мне. Надеюсь, это поможет вам. Сначала у вас есть такая же connection string
в ваших libraries
где вы можете получить доступ к БД, как в app.config
и web.config
после чего вы просто добавляете перегруженный конструктор в файл .edmx (Model.context.cs), который теперь имеет два конструктора: по умолчанию, а другой – только что добавленный (перегруженный).
public YourEntityName(string connString) : base(connString) { }