ソリューションに2つのプロジェクトがあります。
Dataプロジェクトには、データベースに接続するEntity Frameworkモデルがあります。
私のUIプロジェクトには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"
/>
このエラーの原因は何ですか?
App.configでは、接続文字列は次のようになります。
connection string="
Data Source=.\SQLEXPRESS;
Initial Catalog=SaharaPizza;
Integrated Security=True;
MultipleActiveResultSets=True
"
&quotに注意してください。それを一重引用符に変更してみてください '
コピー<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>
アプリの仮想ディレクトリをVS2010からIISで作成した場合、Webサイトのルートから2つのレベルでこのエラーが発生することがわかりました。原因がわからないため、さらに調査する必要があります。たとえば、 、アプリが次のパスにある場合:/admin/advertiser
IISサイトに/admin
仮想ディレクトリがない場合、エラーが表示されます。
私が行ったのは、.../intepub/wwwroot
に空のadmin
ディレクトリを作成しただけで、エラーは消えました。
上記の手順を実行するまで、デバッグを開始できないことがわかります。
私たちのチームには過去にこの問題がありました。覚えるのにしばらく時間がかかりましたが、これも以前に修正した方法とまったく同じです。
接続文字列はEntityClientプロバイダーの有効な文字列のように見えるので、「指定された名前付き接続が構成に見つかりません」という例外メッセージが原因と考えられます。
構成の接続文字列の名前は "SaharaPizzaEntities"です。派生オブジェクトコンテキストを作成するときに、「名前付き接続」を明示的に指定しましたか?
生成されたオブジェクトコンテキストクラスにはいくつかのコンストラクターがあり、1つはパラメーターなしです。
public EntityModelContainer() : base("name=EntityModelContainer",
"EntityModelContainer")
name=EntityModelContainer
は、構成ファイル( "SaharaPizzaEntities")の接続文字列と一致する必要がある接続文字列名です。構成ファイルで名前を変更するか、接続文字列名を明示的に定義できる2番目のコンストラクタを使用することができます。
public EntityModelContainer(string connectionString) : base(connectionString,
"EntityModelContainer")
同じ問題が発生したので、上記の方法をすべて試しました。最後に私は言及したようにそれを解決しました。私の場合、データレイヤーとプレゼンテーションレイヤーが別々になっています。私の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
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="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>
これは動作していなかった接続文字列の例です
接続文字列を与える私のエラーは
<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
ファイルにコピーするだけで、アプリが確実に実行されます。これは私には適切に機能します。
エラーは、別のプロジェクトにデータクラス/エンティティがあり、別のプロジェクトにWebページがある場合に発生します。
私も同じ問題を抱えていたので、あなたのように2つのスレッドを使用していたのですが、これはライブラリでは実行されなかったためだと思いました。これは1つの解決策であり、必要なものではありませんが、これで解決できます
失礼します。
これがお役に立てば幸いです
私のプロジェクトでも同じ問題に直面していました。私は3つの異なるプロジェクトを持っていました
Viewのアプリ構成に接続文字列をコピーしたところ、問題なく動作しました。
また、問題の原因は「 "必要な場所で接続文字列をローカルで使用できない" ""でした。
私はあなたの設定ファイルがWebプロジェクトではなく、他のDLLにあると思います...確かではありません...しかし、接続文字列は実行中のプロジェクトのweb.configにあるはずです...