web-dev-qa-db-ja.com

エンティティフレームワーク接続にメタデータプロパティが必要なのはなぜですか?

DALをLINQの使用からEntity Frameworkに切り替えました。アプリケーションは現在のユーザーに応じて異なるデータベースに接続するため、実行時にDataContextを動的に作成し、適切な接続文字列を渡す必要があります。しかし、古い接続文字列を使用してEntity Framework接続をプログラムで作成しようとすると、接続が失敗しました。接続文字列のキー「server」を正確に認識できなかったと文句を言いました。

Entity Framework接続を機能させるために、これを行う必要があることがわかりました。

EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder();
entityBuilder.Provider = "System.Data.SqlClient";
entityBuilder.ProviderConnectionString = clientConnectionString;
entityBuilder.Metadata = "res://*/xxxxxxxxxx.csdl...";
Entities entities = new Entities(entityBuilder.ToString());

どうしてこれなの?
メタデータプロパティの目的は何ですか?
複数の異なる接続で常に同じであることが問題になるのでしょうか?
それは何であるべきですか?
これを回避する方法はありますか?

前もって感謝します!

更新1:更新Randolphoをありがとう、しかし...
私がこの問題を抱えている根本的な理由は、接続文字列を構成ファイルに保存できないことです。接続文字列は、ユーザーが接続する実行時に動的に決定されます。

これが私の正確なシナリオです:
ユーザーAが接続している場合、アプリはデータベースAからデータをプルします。ユーザーBが接続している場合、アプリはデータベースBからデータをプルします。
接続文字列はメインデータベースに保存され、数は無制限である可能性があります。ユーザーを追加するたびに、web.configにアクセスする必要はなく、最終的には巨大になるということは言うまでもありません。

32
John Bubriski

これらのリンクは非常に有益です。

http://msdn.Microsoft.com/en-us/library/system.data.entityclient.entityconnection.connectionstring.aspx

http://weblogs.asp.net/pgielens/archive/2006/08/21/ADO.NET-Entity-Framework-Metadata.aspx

ボトムライン? Entity Frameworkは、エンティティマッピングを構築するためにメタデータを必要とします。

さらに、接続情報をコードで構築するのではなく、構成ファイルに移動することを検討する必要があります。最初のリンクはその方法を示します。

10
Randolpho

ランドルフォの答えをさらに詳しく:

メタデータプロパティは、特に.SSDL(ストレージモデル)、. CSDL(概念モデル)、および.MSL(マッピングモデル)ファイルの場所を指します。これらの3つのファイルは、本質的にはエンティティデータモデルです。 "res://" URIスタイルの修飾子は、ファイルがリソースとしてコンパイル済みのEDMアセンブリに埋め込まれていることを示します。

27
Dave Swersky