Строка подключения поставщика от Entity Framework

Если вы используете модель данных объекта contex (с файлом 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

но он содержит всю строку соединения с сущностью, и я просто не знаю, как ее разобрать, как получить от нее только строку подключения поставщика.

Ответы

Ответ 1

Оказывается, есть два способа.

Я могу проанализировать строку подключения сущности через EntityConnectionStringBuilder:

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

... или если у меня есть конкретный экземпляр модели, я могу получить его здесь.

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