Извлечение строки подключения из строки подключения объекта - PullRequest
18 голосов
/ 28 февраля 2011

При создании и ADO.NET Entity Connection String вы получаете что-то вроде

<add name="MREntities" connectionString="metadata=res://*/App_Code.MembershipAndRoll.MembershipAndRollEntities.csdl|res://*/App_Code.MembershipAndRoll.MembershipAndRollEntities.ssdl|res://*/App_Code.MembershipAndRoll.MembershipAndRollEntities.msl;provider=MySql.Data.MySqlClient;provider connection string=&quot;server=192.168.0.26;User Id=digitaliv;password=*******;Persist Security Info=True;database=digitaliv&quot;" providerName="System.Data.EntityClient" />

Мой вопрос заключается в том, как вы получаете истинную строку внутреннего соединения, чтобы вызвать ручное соединение SQL для вызова хранимых процедур, пользовательских операторов SQL и т. Д.? Конкретно мне нужна эта часть извлеченная из нее

server=192.168.0.26;User Id=digitaliv;password=*******;Persist Security Info=True;database=digitaliv

Ответы [ 5 ]

29 голосов
/ 28 февраля 2011

Предполагается, что у вас есть экземпляр ObjectContext (если вы используете встроенный конструктор, ваш контекст наследуется от класса EF ObjectContext).Вы можете привести значение свойства ObjectContext.Connection (которое является DbConnection) к EntityConnection.

Класс EntityConnection имеет свойство StoreConnection, которое является фактическим DbConnection, используемым для подключения к базе данных.На самом деле это свойство ConnectionString установлено на то, что вы ищете.

Редактировать: Пример кода (Назначить контекст вашему ObjectContext):

ObjectContext context = entities;
EntityConnection entityConnection = context.Connection as EntityConnection;
if (null != entityConnection)
{
    Console.WriteLine(entityConnection.StoreConnection.ConnectionString);
}
22 голосов
/ 11 марта 2015

Хотя Ян Ремунда справедливо указывает на то, что вам не нужно создавать контекст, и хотя его решение полезно, если вы хотите создать соединение явно сразу после прочтения строки соединения EntityClient, оно все еще немного запутано, есливсе, что вам нужно, - это получить строку подключения внутреннего провайдера (именно об этом просит OP).

Это правда, что вам не нужно открывать соединение, вы можете просто получить ConnectionString внутреннегоStoreConnection затем сразу же отмените его, но почему?

Вместо этого используйте соответствующий компоновщик строки подключения:

new EntityConnectionStringBuilder(outerConnectionString).ProviderConnectionString

См. EntityConnectionStringBuilder .

10 голосов
/ 18 июня 2013

Вам не нужно создавать экземпляр ObjectContext.Потому что в этом случае вы должны ссылаться на сборки, в которых хранятся метаданные и для производительности они тоже не очень хороши.

Существует более простой способ получить строку подключения провайдера в свойстве StoreConnection.

2 голосов
/ 01 августа 2017

Мы можем использовать следующий код для извлечения строки подключения только из строки подключения структуры объекта без информации метаданных.

string connectionString = new MREntities().Database.Connection.ConnectionString
0 голосов
/ 28 февраля 2011

попробуйте это:

conn = ConfigurationManager.ConnectionStrings["MREntities"].ConnectionString;
...