Указанное именованное соединение либо не найдено в конфигурации, не предназначено для использования с поставщиком EntityClient, либо недействительно
У меня есть два проекта в решении.
- PizzaSoftware.Data
- 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="
Data Source=.\SQLEXPRESS;
Initial Catalog=SaharaPizza;
Integrated Security=True;
MultipleActiveResultSets=True
""
providerName="System.Data.EntityClient"
/>
Что может быть причиной этой ошибки?
10 ответов
В вашем app.config строка подключения выглядит следующим образом:
connection string="
Data Source=.\SQLEXPRESS;
Initial Catalog=SaharaPizza;
Integrated Security=True;
MultipleActiveResultSets=True
"
Обратите внимание на ". Попробуйте изменить это на одну цитату
Копия <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 разных проекта
- Данные, в которые я добавил структуру объекта. этот проект имел файл App.config со строкой подключения
- Ведущий: с моим Ведущим
- Вид: с пользовательским интерфейсом.
Я просто скопировал строку подключения в настройках приложения 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="data source=abc;initial catalog=LibraryMgtSys;Persist Security Info=True;user id=sa;password=123;MultipleActiveResultSets=True"" 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="data source=TILANITHOTAMUNE\SQLEXPRESS;initial catalog=LibraryMgtSys;Persist Security Info=True;user id=sa;password=testing;MultipleActiveResultSets=True"" 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="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"" 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="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"" providerName="System.Data.EntityClient" />
Проблема может быть легко решена. Просто скопируйте строку подключения из Aap.Config
в Web.config
файл, это, безусловно, запустит ваши приложения. Это работает правильно для меня.
Ошибка возникает, когда у вас есть класс данных / сущность в другом проекте и веб-страницы в отдельном проекте.