指定的命名连接在配置中找不到,不打算与EntityClient提供程序一起使用,或者无效

时间:2011-03-27 17:28:52

标签: c# visual-studio-2010 entity-framework windows-forms-designer

我在解决方案中有两个项目。

  1. PizzaSoftware.Data
  2. PizzaSoftware.UI
  3. 在Data项目中,我有我的Entity Framework模型,它连接到我的数据库。

    我的UI项目有一个对Data的项目引用,以及它的外观:

    enter image description here

    我在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 个答案:

答案 0 :(得分:19)

将App.Config中的<connectionStrings>从PizzaSoftware.Data复制到web.config PizzaSoftware.UI并添加到web.config

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

答案 1 :(得分:10)

在app.config中,您的连接字符串看起来像..

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

注意&amp; quot。尝试将其更改为单引号“

答案 2 :(得分:2)

我刚刚发现如果应用程序的虚拟目录是从VS2010在IIS中从网站根目录创建的两个级别,则会发生此错误。不确定为什么会发生,需要进一步调查。 例如,如果您的应用位于此路径中:/admin/advertiser如果您的IIS站点中没有/admin虚拟目录,则会出现错误。

我所做的只是在admin中创建了一个空的.../intepub/wwwroot目录,错误消失了。

您会发现在执行上述步骤之前,您将无法开始调试。

我们团队过去遇到过这个问题,需要花一些时间才能记住,但这正是我们之前修复过的问题。

答案 3 :(得分:0)

连接字符串看起来像是EntityClient提供程序的有效字符串,因此我的猜测是来自异常消息“在配置中找不到指定的命名连接”。

配置中连接字符串的名称是“SaharaPizzaEntities”。在创建派生对象上下文时,是否明确指定了“命名连接”?

生成的对象上下文类有几个构造函数,一个是无参数的:

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

name=EntityModelContainer是连接字符串名称,必须与配置文件中的连接字符串匹配(“SaharaPizzaEntities”)。您可以更改配置文件中的名称,也可以使用允许明确定义连接字符串名称的第二个构造函数:

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

答案 4 :(得分:0)

我有同样的问题,所以我正在使用像你这样的2线程,我认为这是因为在库中没有运行,然后我把它放在主项目中,然后开始工作成功完成。 这可能是一个解决方案,而不是您需要的解决方案,但您可以通过此

来解决

请原谅我的英语。

我希望这可以帮到你

答案 5 :(得分:0)

问题很容易解决。只需将您的连接字符串从Aap.Config复制到Web.config文件,这肯定会运行您的应用。这适合我。
当您在另一个项目中的数据类/实体和单独项目中的WebPages时,会发生错误。

答案 6 :(得分:0)

我的项目也遇到了同样的问题。 我有3个不同的项目

  1. 我添加了实体框架的数据。这个项目的App.config文件带有连接字符串
  2. 演示者:与我的演示者
  3. 查看:使用UI。
  4. 我刚刚在View的app配置中复制了Connection字符串,它运行正常。

    问题的原因是&#34;&#34;&#34;连接字符串在本地不可用,需要的地方&#34;&#34;&#34;。

答案 7 :(得分:0)

这是一个无法正常工作的示例连接字符串

       

给出连接字符串的错误是

  <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" />

答案 8 :(得分:0)

我遇到了同样的问题&amp;我尝试了所有提到的方法。最后我按照提到的解决了它。在我的情况下,我有单独的数据层和表示层。在我的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 i手动配置的连接中,如下所示:

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

它给了我与上面提到的相同的例外。所以我通过在web配置文件中添加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>

答案 9 :(得分:0)

我认为您的配置文件不在Web项目中,它在其他DLL中....不太确定...但您的连接字符串应该在正在执行的项目的web.config中... < / p>