20

オブジェクト コンテキスト データ モデル (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

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

4

2 に答える 2

42

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

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

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

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

((System.Data.EntityClient.EntityConnection)ModelInstance.Connection).StoreConnection.ConnectionString;
于 2012-08-07T07:07:00.617 に答える