1つのエンティティフレームワークオブジェクトがあり、プロジェクトにconnectionstring
追加するapp.config
と、connectionstring
セクションに追加されますが、新規に作成entitycontext
してこれを使用したい場合connectionstring
、このエラーが表示されます
1つのエンティティフレームワークオブジェクトがあり、プロジェクトにconnectionstring
追加するapp.config
と、connectionstring
セクションに追加されますが、新規に作成entitycontext
してこれを使用したい場合connectionstring
、このエラーが表示されます
回答:
あなたの問題は、ソリューション内に複数のプロジェクトがあり、edmx
ファイルを含むエンティティフレームワークのものを含むプロジェクトがソリューションのスタートアッププロジェクトではないという事実に起因していると思います。この場合、接続文字列がEF app.config
プロジェクトに存在していても、CLRは実行時にそれを見つけることができません。たとえば、ソリューションにWebサイトとEFプロジェクトがある場合、接続文字列をEFプロジェクトのapp.config
からWebサイトのにコピーする必要がありますweb.config
。基本的に、接続文字列データは、.NetスレッドがCLRによって開始されたプロジェクト(つまり、スタートアッププロジェクト)の構成ファイルに存在する必要があります。これが当てはまらない場合は、edmx
ファイル、その表面を右クリックしてプロパティを選択し、接続文字列をコピーして[接続文字app.config
列]セクションに貼り付けます。このようにして、設定に正しいものがあることを確認できます。
編集:
ObjectContext ConstructorのDocumenationで
確認できるよう
に、最初のパラメーターは、EDMの作成時に生成されたコードである接続文字列名です。どういうわけか、接続 文字列の名前が変更された場合は、モデルを右クリックして[ データベースからモデルを更新... ]を選択するだけです。ウィザードに従って、設定とデザイナーを更新し、これを反映します。変化する。
app.configの接続文字列をweb.configにコピーするか、ファイル全体を出力を表示するプロジェクトにコピーする必要があります。フレームワークを利用する条件の一つです。
カスタムデータベースロジックを.dllに入れて、ソリューション内の複数のプロジェクトで使用しようとしたときに、この問題に遭遇しました。
.dllには正しいapp.configファイルがありましたが、機能しませんでした。エンティティフレームワークは、.exeのapp.configに接続情報を必要としていました。そこへの情報のコピーはうまくいきました。
接続文字列を.edmxに直接貼り付けるというMortezaの解決策は、そこに値を貼り付けることができないため機能しませんでした。
こんにちは私はこの問題を抱えていて、それは私を狂わせていました。とにかく、私は問題が何であるかを理解しました。あなたがしなければならない最初のことはconnectionstrings
、app.config
とweb.config
が同じであることを確認することです。次に、.edmx
ファイルをダブルクリックして、テーブルを表示する必要があります。テーブルの上ではなく、テーブルの近くの任意の場所をクリックしたら、プロパティに移動します。ドロップダウンリストからを選択ConceptualEntityModel
し、エンティティコンテナ名を検索してよく覚えます。
次に、edmxファイルのデザイナーに移動して、コンストラクターを開きます。(デザイナーはedmxファイルのサブフォルダーです)コンストラクターには、BASEパラメーターに2つのパラメーターが必要です。
public DBEntities() : base("name=DBEntities", "DBEntities")
{
this.ContextOptions.LazyLoadingEnabled = true;
OnContextCreated();
}
これはその1つです。最初のパラメーターには、.edmx
ファイルが含まれているプロジェクトファイルの名前を指定する必要があります。2番目のパラメーターには、前述のプロパティのエンティティコンテナー名を指定する必要があります。すべてのコンストラクターを配置することを忘れないでください:base("", "")
少なくともそれが私の問題であり、私の問題はそのように解決されました。私はあなたがあなたの問題をこのように解決できることを願っています。
私にはこれについてのバリエーションがあり、誰もカバーしていないようでした。
いくつかのモデルを含むメインプロジェクトと、単体テストを含むテストプロジェクトがありました。テストプロジェクトは機能していましたが、OPに記載されているエラーで停止しました。EDMXファイルの名前変更や移動は行っていません。
.configファイルの比較について多くのアドバイスがありましたが、私のプロジェクトにはまったくありませんでした。
最後に、app.configファイルをメインプロジェクトからテストプロジェクトにコピーしました。これが正しいステップであるか、または追加のモデルが追加されたときに保守性の問題が発生するかどうかはわかりませんが、少なくとも私の単体テストは今再び正しく実行されています。
がモルテザManavi」答えは、この問題を解決しない、別の解決策は、動的に接続文字列を構築し、あなたのObjectContextのコンストラクタにそれを渡すことです:
public static string CreateConnectionString()
{
var assemblyPath = Assembly.GetExecutingAssembly().Location;
string assemblyLocation = Path.GetDirectoryName(assemblyPath);
string dbPath = Path.Combine(assemblyLocation, "YourDatabase.sdf");
var sqlBuilder = new SqlConnectionStringBuilder { DataSource = dbPath };
var entityBuilder = new EntityConnectionStringBuilder
{
ProviderConnectionString = sqlBuilder.ConnectionString,
Provider = "System.Data.SqlServerCe.3.5",
Metadata = @"res://*/YourModel.csdl|
res://*/YourModel.ssdl|
res://*/YourModel.msl"
};
return entityBuilder.ToString();
}
// Snip...
var entityContext = new YourObjectContext(CreateConnectionString());
これにより、接続文字列情報をスタートアッププロジェクトのapp.configにコピーする必要がなくなります。これは、少なくとも私の場合は望ましくありませんでした。
VS2010からIISでアプリを作成した場合、Webサイトのルートから2つのレベルでこのエラーが発生することがわかりました。それがなぜ起こるかわからない、もっと調査する必要があるでしょう。たとえば、アプリがこのパスにある場合:IISサイトに仮想ディレクトリ/admin/advertiser
がない場合、エラーが表示さ/admin
れます。
私がしたことはadmin
、.../intepub/wwwroot
エラーが消えて空のディレクトリが作成されたことだけです。
上記の手順を実行するまで、デバッグを開始できないことがわかります。
私たちのチームには過去にこの問題がありました。覚えるのに少し時間がかかりましたが、これも以前に修正した方法とまったく同じです。
私はn'tierアーキテクチャを使用していて、同じ問題が発生しましたが、これは私に役立ちます。これがuに役立つことを願っています。まず、あなたは同じ持っているconnection string
あなたにlibraries
、あなたがのようにDBにアクセスできる場所app.config
とweb.config
あなたは、単に今は2コンストラクタ1がデフォルトとuは追加した他の1(ある持っていることを、オーバーロードコンストラクタ.edmx中(Model.context.cs)ファイルを追加することをした後過負荷)。
public YourEntityName(string connString)
: base(connString)
{
}