web-dev-qa-db-ja.com

指定された名前付き接続が構成に見つからないか、EntityClientプロバイダーでの使用を意図していないか、または無効です

ソリューションに2つのプロジェクトがあります。

  1. PizzaSoftware.Data
  2. PizzaSoftware.UI

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

このエラーの原因は何ですか?

16
delete

App.configでは、接続文字列は次のようになります。

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

&quotに注意してください。それを一重引用符に変更してみてください '

10
Ryan Alford

コピー<connectionStrings> PizzaSoftware.DataのApp.ConfigからPizzaSoftware.UIのweb.configに、web.configに追加

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

アプリの仮想ディレクトリをVS2010からIISで作成した場合、Webサイトのルートから2つのレベルでこのエラーが発生することがわかりました。原因がわからないため、さらに調査する必要があります。たとえば、 、アプリが次のパスにある場合:/admin/advertiser IISサイトに/admin仮想ディレクトリがない場合、エラーが表示されます。

私が行ったのは、.../intepub/wwwrootに空のadminディレクトリを作成しただけで、エラーは消えました。

上記の手順を実行するまで、デバッグを開始できないことがわかります。

私たちのチームには過去にこの問題がありました。覚えるのにしばらく時間がかかりましたが、これも以前に修正した方法とまったく同じです。

2
Jovica Zaric

接続文字列はEntityClientプロバイダーの有効な文字列のように見えるので、「指定された名前付き接続が構成に見つかりません」という例外メッセージが原因と考えられます。

構成の接続文字列の名前は "SaharaPizzaEntities"です。派生オブジェクトコンテキストを作成するときに、「名前付き接続」を明示的に指定しましたか?

生成されたオブジェクトコンテキストクラスにはいくつかのコンストラクターがあり、1つはパラメーターなしです。

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

name=EntityModelContainerは、構成ファイル( "SaharaPizzaEntities")の接続文字列と一致する必要がある接続文字列名です。構成ファイルで名前を変更するか、接続文字列名を明示的に定義できる2番目のコンストラクタを使用することができます。

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

同じ問題が発生したので、上記の方法をすべて試しました。最後に私は言及したようにそれを解決しました。私の場合、データレイヤーとプレゼンテーションレイヤーが別々になっています。私の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>
0
DevT

これは動作していなかった接続文字列の例です

接続文字列を与える私のエラーは

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

問題は簡単に解決できます。接続文字列をAap.ConfigからWeb.configファイルにコピーするだけで、アプリが確実に実行されます。これは私には適切に機能します。
エラーは、別のプロジェクトにデータクラス/エンティティがあり、別のプロジェクトにWebページがある場合に発生します。

0
user1576593

私も同じ問題を抱えていたので、あなたのように2つのスレッドを使用していたのですが、これはライブラリでは実行されなかったためだと思いました。これは1つの解決策であり、必要なものではありませんが、これで解決できます

失礼します。

これがお役に立てば幸いです

0
Leudi R.

私のプロジェクトでも同じ問題に直面していました。私は3つの異なるプロジェクトを持っていました

  1. エンティティフレームワークを追加したデータ。このプロジェクトには、接続文字列を含むApp.configファイルがありました
  2. プレゼンター:プレゼンターと
  3. 表示:UIあり。

Viewのアプリ構成に接続文字列をコピーしたところ、問題なく動作しました。

また、問題の原因は「 "必要な場所で接続文字列をローカルで使用できない" ""でした。

0
suresh

私はあなたの設定ファイルがWebプロジェクトではなく、他のDLLにあると思います...確かではありません...しかし、接続文字列は実行中のプロジェクトのweb.configにあるはずです...

0
Roshdy Abuzeid