C# compose connectionString в app.config с использованием параметров appSettings

Можно ли составить какую-то запись XML в app.config (в моем случае некоторые из connectionStrings) с помощью appSettings параметры из одного файла? Пример:

  <connectionStrings>
    <add name="MyContextDB" connectionString="Data Source =.;Initial Catalog = EFMyContextDB;Integrated Security = false;User Id=user;Password=pwd" providerName="System.Data.SqlClient" />
  </connectionStrings>

  <appSettings>
    <add key="UserId" value="userValue" />
    <add key="Password" value="pwdValue" />
  </appSettings>

Я хочу как-то использовать UserId вместо user а также Password вместо pwd значения MyContextDB's connectionString,

Это соединение затем используется в DbContext объект:

public class MyContext : DbContext
{
    public MyContext() : base("name = MyContextDB") { }
    ...
}

2 ответа

Решение

Вы, конечно, можете посмотреть на использование SqlConnectionStringBuilder, Передайте существующую строку подключения в конструктор. Установить Password и UserID свойства. Тогда позвони ToString(),

Вы не сможете передать такую ​​строку подключения для вашего DbContext, Вы могли бы рассмотреть возможность рефакторинга, чтобы заводской шаблон или что-то подобное

Я также хотел бы рассмотреть возможность использования config config для фактического обновления файлов конфигурации во время сборки.

Используйте SqlConnectionStringBuilder:

    System.Data.SqlClient.SqlConnectionStringBuilder builder = new System.Data.SqlClient.SqlConnectionStringBuilder(System.Configuration.ConfigurationManager.ConnectionStrings["MyContextDB"].ToString());

    builder.UserID = System.Configuration.ConfigurationManager.AppSettings["UserId"];
    builder.Password = System.Configuration.ConfigurationManager.AppSettings["Password"];

Затем, чтобы получить новую строку подключения:

builder.ToString();
Другие вопросы по тегам