Подтвердить что ты не робот

Извлечь строку подключения из строки Entity Connection

При создании и подключении 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
4b9b3361

Ответ 1

Предполагая, что у вас есть экземпляр 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);
}

Ответ 2

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

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

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

new EntityConnectionStringBuilder(outerConnectionString).ProviderConnectionString

См. EntityConnectionStringBuilder.

Ответ 3

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

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

 using (var ec = new EntityConnection(connstr.ConnectionString))
 {
   var sqlConn = ec.StoreConnection as SqlConnection;
   sqlConn.Open();
 }

Ответ 4

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

string connectionString = new MREntities().Database.Connection.ConnectionString

Ответ 5

попробуйте следующее:

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