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

У меня есть два проекта в решении.

  1. PizzaSoftware.Data
  2. PizzaSoftware.UI

В проекте Data у меня есть модель Entity Framework, которая подключается к моей базе данных.

Мой проект пользовательского интерфейса имеет ссылку на проект Data и вот как это выглядит:

Я создал пользовательский элемент управления в папке UserControls.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using PizzaSoftware.Data;

namespace PizzaSoftware.UI.UserControls
{
    public partial class AutoCompleteTextBox : UserControl
    {
        AutoCompleteStringCollection completeCollection = new AutoCompleteStringCollection();

        public AutoCompleteTextBox()
        {
            InitializeComponent();
        }

        private void AutoCompleteTextBox_Load(object sender, EventArgs e)
        {
            CustomerRepository repo = new CustomerRepository();
            var customers = repo.FindAllCustomers().ToList();

            foreach (var customer in customers)
            {
                completeCollection.Add(customer.Name);
            }

            txtSearchBox.AutoCompleteMode = AutoCompleteMode.Suggest;
            txtSearchBox.AutoCompleteSource = AutoCompleteSource.CustomSource;
            txtSearchBox.AutoCompleteCustomSource = completeCollection;
        }
    }
}

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

Вот как выглядит моя строка подключения:

<connectionStrings>
   <add 
      name="SaharaPizzaEntities"
      connectionString="
         metadata=res://*/PizzaSoftwareEntityModel.csdl|res://*/PizzaSoftwareEntityModel.ssdl|res://*/PizzaSoftwareEntityModel.msl;
         provider=System.Data.SqlClient;
         provider connection string=&quot;
            Data Source=.\SQLEXPRESS;
            Initial Catalog=SaharaPizza;
            Integrated Security=True;
            MultipleActiveResultSets=True
         &quot;"
      providerName="System.Data.EntityClient"
/>

Что может быть причиной этой ошибки?

10 ответов

Решение

В вашем app.config строка подключения выглядит следующим образом:

   connection string=&quot;
      Data Source=.\SQLEXPRESS;
      Initial Catalog=SaharaPizza;
      Integrated Security=True;
      MultipleActiveResultSets=True
   &quot;

Обратите внимание на ". Попробуйте изменить это на одну цитату

Копия <connectionStrings> из App.Config из PizzaSoftware.Data в web.config из PizzaSoftware.UI и добавьте в web.config

<assemblies>
<add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
</assemblies>

Я только что обнаружил, что если виртуальный каталог для приложения создается в IIS из VS2010 на двух уровнях от корня веб-сайта, эта ошибка будет происходить. Не уверен, почему это происходит, нужно будет расследовать больше. Например, если ваше приложение находится по этому пути: /admin/advertiser ошибка появится, если у вас нет /admin виртуальный каталог на вашем сайте IIS.

Все, что я сделал, это создал пустой admin каталог в моем .../intepub/wwwroot и ошибка исчезла.

Вы обнаружите, что не сможете начать отладку, пока не выполните шаг выше.

У нас была эта проблема в нашей команде в прошлом, потребовалось некоторое время, чтобы вспомнить, но именно это мы и исправили раньше.

Я также столкнулся с той же проблемой в моем проекте. У меня было 3 разных проекта

  1. Данные, в которые я добавил структуру объекта. этот проект имел файл App.config со строкой подключения
  2. Ведущий: с моим Ведущим
  3. Вид: с пользовательским интерфейсом.

Я просто скопировал строку подключения в настройках приложения View, и она работает нормально.

и причиной проблемы было "" "Строка подключения недоступна локально, где это требовалось" "".

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

Имя строки подключения в конфигурации: "SaharaPizzaEntities". Вы явно указали "именованное соединение" при создании контекста производного объекта?

Сгенерированный класс контекста объекта имеет несколько конструкторов, один из которых не имеет параметров:

public EntityModelContainer() : base("name=EntityModelContainer",
    "EntityModelContainer")

name=EntityModelContainer Имя строки подключения, которое должно соответствовать строке подключения в вашем файле конфигурации ("SaharaPizzaEntities"). Вы можете изменить имя в конфигурационном файле или использовать второй конструктор, который позволяет точно определить имя строки подключения:

public EntityModelContainer(string connectionString) : base(connectionString,
    "EntityModelContainer")

Я думаю, что ваш конфигурационный файл не находится в веб-проекте, он находится в какой-то другой DLL... не очень уверен... но ваша строка подключения должна быть в web.config проекта выполняется...

У меня та же проблема, и я попробовал все вышеупомянутые методы. наконец я решил это, как уже упоминалось. В моем случае у меня есть отдельный уровень данных и уровень представления. в моем app.config (слой данных) у меня есть такое соединение.

<add name="LibraryMgtSysEntities" connectionString="metadata=res://*/DataLibraryMgtSys.csdl|res://*/DataLibraryMgtSys.ssdl|res://*/DataLibraryMgtSys.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=abc;initial catalog=LibraryMgtSys;Persist Security Info=True;user id=sa;password=123;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />

в моем web.config я вручную настроил соединение следующим образом:

<add name="DefaultConnection" providerName="System.Data.SqlClient"
 connectionString="Data Source=abc;
 Initial Catalog=LibraryMgtSys;
 Integrated Security=SSPI;
 user id=sa;password=123;" />

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

мой финал web.config файл следующим образом:

<connectionStrings>
    <clear />
    <add name="LibraryMgtSysEntities" connectionString="metadata=res://*/DataLibraryMgtSys.csdl|res://*/DataLibraryMgtSys.ssdl|res://*/DataLibraryMgtSys.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=TILANITHOTAMUNE\SQLEXPRESS;initial catalog=LibraryMgtSys;Persist Security Info=True;user id=sa;password=testing;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />
    <add name="DefaultConnection" providerName="System.Data.SqlClient"
         connectionString="Data Source=abc;
         Initial Catalog=LibraryMgtSys;
         Integrated Security=SSPI;
         user id=sa;password=123;" />
  </connectionStrings>

У меня была такая же проблема, поэтому я использовал 2 потока, как вы, и я подумал, что это потому, что в библиотеке не запускается, затем я помещаю его в основной проект, а затем начинаю работать успешно завершено. Это может быть одно решение, а не то, что вам нужно, но вы можете решить с этим

прошу прощения за мой английский.

Я надеюсь это тебе поможет

Вот пример строки подключения, которая не работала

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

  <connectionStrings>
<add name="IEMRWEBSEntities" connectionString="metadata=res://*/IemrWebs.csdl|res://*/IemrWebs.ssdl|res://*/IemrWebs.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=192.168.0.25;initial catalog=IEMRWEBSSitecore_Custom;persist security info=True;user id=IEMRWEBS;password=aDn16s!$AaS;multipleactiveresultsets=True;application name=EntityFramework&quot;" providerName="System.Data.EntityClient" />

Проблема с путем

см * используется в строке подключения

"metadata=res://*/IemrWebs.csdl|res://*/IemrWebs.ssdl|res://*

замените * на пространство имен, в котором находится ваш файл edmx

поместите пространство имен вместо * в ваш файл appconfig

мое пространство имен файла edmx - IemrWebs.Data.Model, поэтому я заменил * на IemrWebs.Data.Model, см. ниже, и он работает. Ниже приведена правильная строка подключения.

<connectionStrings>
<add name="IEMRWEBSEntities" connectionString="metadata=res://IemrWebs.Data.Model/IemrWebs.csdl|res://IemrWebs.Data.Model/IemrWebs.ssdl|res://IemrWebs.Data.Model/IemrWebs.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=192.168.0.25;initial catalog=IEMRWEBSSitecore_Custom;persist security info=True;user id=IEMRWEBS;password=aDn16s!$AaS;multipleactiveresultsets=True;application name=EntityFramework&quot;" providerName="System.Data.EntityClient" />

Проблема может быть легко решена. Просто скопируйте строку подключения из Aap.Config в Web.config файл, это, безусловно, запустит ваши приложения. Это работает правильно для меня.
Ошибка возникает, когда у вас есть класс данных / сущность в другом проекте и веб-страницы в отдельном проекте.

Другие вопросы по тегам