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

C# 指定的命名连接在配置中找不到、不打算与EntityClient提供程序一起使用,或者无效,c#,visual-studio-2010,entity-framework,windows-forms-designer,C#,Visual Studio 2010,Entity Framework,Windows Forms Designer,我在一个解决方案中有两个项目 比萨饼软件。数据 PizzaSoftware.UI 在数据项目中,我有连接到数据库的实体框架模型 我的UI项目有一个对数据的项目引用,下面是它的外观: <connectionStrings> <add name="SaharaPizzaEntities" connectionString=" metadata=res://*/PizzaSoftwareEntityModel.csdl|res://*

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

  • 比萨饼软件。数据
  • PizzaSoftware.UI
  • 在数据项目中,我有连接到数据库的实体框架模型

    我的UI项目有一个对数据的项目引用,下面是它的外观:

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

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

    导致此错误的原因可能是什么?

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

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

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

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

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

    在app.config中,连接字符串如下所示

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

    注意这句话。试着把它改成一个单引号“

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

    请原谅我的英语

    我希望这可以帮助您

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

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

    我刚刚发现,如果应用程序的虚拟目录是从VS2010在IIS中从网站根目录创建的,则会发生此错误。不确定为什么会发生这种情况,需要进行更多的调查。 例如,如果您的应用程序位于以下路径中:
    /admin/advertiser
    ,则如果您的IIS站点中没有
    /admin
    虚拟目录,则会出现错误

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

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


    我们团队过去也遇到过这个问题,需要一些时间才能记住,但这正是我们以前解决问题的方法。

    这个问题很容易解决。只需将您的连接字符串从
    Aap.Config
    复制到
    Web.Config
    文件,这肯定会运行您的应用程序。这对我来说很合适。

    如果在另一个项目中有dataclass/entity,而在另一个项目中有网页,则会发生此错误。

    我的项目中也面临同样的问题。 我有3个不同的项目

  • 我在其中添加实体框架的数据。此项目正在使用连接字符串创建App.config文件
  • 演示者:与我的演示者
  • 视图:使用UI
  • 我刚刚在View的应用程序配置中复制了连接字符串,它工作正常


    问题的原因是“”连接字符串在本地不可用,而它是必需的“”。

    下面是一个不起作用的连接字符串示例

    我给出连接字符串时出错

      <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" />
    
    将*替换为放置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" />
    
    
    

    我遇到了同样的问题&我尝试了上面提到的所有方法。最后我解决了上面提到的问题。在我的例子中,我有单独的数据层和表示层。在我的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配置文件中添加app.config值来解决这个问题

    我的最终
    web.config
    文件如下:

    <add name="DefaultConnection" providerName="System.Data.SqlClient"
     connectionString="Data Source=abc;
     Initial Catalog=LibraryMgtSys;
     Integrated Security=SSPI;
     user id=sa;password=123;" />
    
    <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>
    
    
    
    我认为您的配置文件不在web项目中,它在其他某个DLL中…不太确定…但您的连接字符串应该在正在执行的项目的web.config中…

    为了澄清,App.config的内容在两个项目中都是相同的。我在一个项目中有相同的错误消息,更改它没有帮助。这是一个测试/辅助项目,所以如果我有解决方案,我一定会留下评论来帮助其他人。好的,我刚刚修复了我的项目。它总是编译得很好,我的问题来自一个单元测试项目,它需要我将相同的连接字符串添加到单元测试项目中的App.Config文件中。对我来说一切都是固定的。我仍然有“这对我来说很好,但我看到msdn网站上的那个单引号(')为他们修正了它。不管怎样……都不是一个“乐趣”“错误,因为它太模糊了。哦,就像tom说的,我从app.config向web.config添加了相同的连接字符串。Albert Tolokonnikov的解决方案对我有效,我将entity framework项目的web.config中的连接字符串复制到正在运行的项目的web.config中。发生这种情况时,我碰巧打开了一个VS 2010项目来查看一些源代码。关闭它使VS 2015的错误消失。那太糟糕了。