1

Я нахожусь в процессе развертывания ASP.NET WebAPI проекта в Elastic Beanstalk в AWS.Как переместить объект рамочных asp.net ConnectionStrings в пределах AppSettings раздела web.config

Проект WebAPI основан на Entity Framework, и имеет свойство строки соединения, определенный в web.config под <connectionStrings> следующим образом:

<connectionStrings> 
    <add name="myDBEntities" connectionString="metadata=res://*/myDBModel.csdl|res://*/myDBModel.ssdl|res://*/myDBModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=myServer\test;initial catalog=myDB;user id=myDBUser;password=PASS==;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 
</connectionStrings> 

Что я стремлюсь сделать, это рамки сущности " myDBEntities "ConnectionString имя решительность через вход под <appSettings> раздел web.config вместо, например, так:

<appSettings> 
    <add key="myDBEntities" value="metadata=res://*/myDBModel.csdl|res://*/myDBModel.ssdl|res://*/myDBModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=myServer\test;initial catalog=myDB;user id=myDBUser;password=PASS==; multipleactiveresultsets=True;App=EntityFramework&quot; providerName=System.Data.EntityClient;" /> 
    </appSettings> 

Примечание: У меня есть dodgily добавлено "providerName = System.Data.EntityClient;" до конца myDBEntities appSetting значение в попытке заставить его работать/разрешать. Но не повезло.

удаляющего из ConnectionString установку и перемещение в рамках AppSettings так, что она будет конфигурируемых как настройка конфигурации среды в Elastic Beanstalk.

Любые идеи/предложения?

+0

Можете ли вы точно указать, в чем цель? Там может быть более легкое решение! –

+0

Когда .NET пытается разрешить connectionString с именем «myDBEntities», я хочу, чтобы он смог разрешить использование пары «ключ/значение» appSetting. – DanH

+0

Что вы уже упомянули в вопросе, в чем цель этого! –

ответ

1

Нашел жизнеспособное решение, предлагаемое этим решением, динамически создает строки подключения при запуске приложения.

Во-первых, создать appSetting с ключом имя строки подключения, который вы хотите заменить в этом случае «myDBEntities». Для его значения использовать ту же строку подключения метаданных в результате:

<appSettings> 
    <add key="myDBEntities" value="metadata=res://*/myDBModel.csdl|res://*/myDBModel.ssdl|res://*/myDBModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=myServer\test;initial catalog=myDB;user id=myDBUser;password=PASS==;multipleactiveresultsets=True;App=EntityFramework&quot;" /> 
</appSettings> 

(Примечание: не беспокоиться об имени поставщика в строке appSetting пока это будет рассматриваться в следующем разделе)

Добавьте следующий код в global.asax файл:

protected void Application_Start() 
    { 
     // ... other stuff in here if not already empty. 

     var fieldInfo = typeof(ConfigurationElementCollection).GetField("bReadOnly", BindingFlags.Instance | BindingFlags.NonPublic); 
     if (fieldInfo != null) 
     { 
      fieldInfo.SetValue(ConfigurationManager.ConnectionStrings, false); 

      // Check for AppSetting and Create 
      if (ConfigurationManager.AppSettings["myDBEntities"] != null) 
      { 
       ConnectionStringSettings myDB = new ConnectionStringSettings("myDBEntities", ConfigurationManager.AppSettings["myDBEntities"]); 
       myDB.ProviderName = "System.Data.EntityClient"; 
       ConfigurationManager.ConnectionStrings.Add(myDB); 
      } 
     } 
    } 

Важно:

  1. При создании «ConnectionStringSettings» имя должно соответствовать этой структуры объекта ConnectionString вы заменяете (то есть. "myDBEntities").

  2. Обязательно укажите правильное имя поставщика (например, «System.Data.EntityClient»). Это можно сделать из исходного параметра connectionString.

  3. Обязательно закомментируйте или удалите исходную настройку connectionString.

Entity Framework теперь в состоянии решить appSetting "myDBEntities" как соединение Entity Framework.

Следующая статья была полезной в получении этого решения Can I Add ConnectionStrings to the ConnectionStringCollection at Runtime?

Надеется, что это помогает другим получать их .NET-приложения в AWS Elastic Beanstalk облако.

+0

Вы когда-нибудь находили лучшее решение для преобразования строк соединения в эластичном бобовом стебле? –

+0

В эластичном бобовом стебле appSettings внутри web.config становятся переменными окружения в AWS EC2. Лучший способ формализовать это - включить их в сценарий Cloudformation. – DanH

Смежные вопросы