web-dev-qa-db-ja.com

EntityFrameworkからのプロバイダー接続文字列

オブジェクトコンテックスデータモデル(EDMXファイルを使用)を使用している場合は、その作成時に、構成ファイル内で接続文字列を指定することをお勧めします。

残念ながら、接続文字列には、エンティティ接続に必要なものがいくつか含まれているため、一般的な接続文字列ではありません。 MySql接続の例:

<add name="MyDbEntities" connectionString="metadata=res://*/Namespace.MyDb.csdl|res://*/Namespace.MyDb.ssdl|res://*/Namespace.MyDb.msl;provider=MySql.Data.MySqlClient;provider connection string=&quot;server=172.17.17.154;User Id=user;password=password;Persist Security Info=True;database=MyDatabase;Convert Zero Datetime=true&quot;" providerName="System.Data.EntityClient" />

私が抱えている問題は、この接続文字列のパラメーター「プロバイダー接続文字列」にプロバイダーの接続文字列が含まれていることです。

特定の理由で、エンティティモデルとは関係のない新しいMySqlConnectionを作成する必要があります。 MySqlConnectionを作成するには、mysql接続文字列を指定する必要があります。これはエンティティモデルのプロバイダー接続文字列であり、必要な接続文字列は常にエンティティモデルの同じ接続文字列であることがわかっています。

しかし、プログラムでプロバイダー接続文字列を取得するにはどうすればよいですか?モデルインスタンスの閲覧に行き詰まり、成功しませんでした...

以下:

ModelInstance.Connection.ConnectionString

接続文字列全体ではなく、「name = TestBotEntities」のようなものが含まれています。だから私は試しました:

ConfigurationManager.ConnectionStrings["MyDbEntities"].ConnectionString

しかし、これにはエンティティ接続文字列全体が含まれており、それを解析する方法、プロバイダー接続文字列のみを取得する方法がわかりません。

18
Mirek

2つの方法があることがわかりました。

EntityConnectionStringBuilderを介してエンティティ接続文字列を解析できます。

string entityConnectionString = ConfigurationManager.ConnectionStrings["MyDbEntities"].ConnectionString;
string providerConnectionString = new EntityConnectionStringBuilder(entityConnectionString).ProviderConnectionString;

...または、特定のモデルインスタンスを利用できる場合は、ここから取得できます。

((System.Data.EntityClient.EntityConnection)ModelInstance.Connection).StoreConnection.ConnectionString;
39
Mirek