asp.net プロジェクト (4.0) があり、接続文字列にアクセスする最善の方法を見つけようとしています。
web.config ファイルには 2 つの接続文字列があり、1 つは本番用、もう 1 つはテスト用です。多くのaspxページがあり、関数またはある種のグローバル変数による接続の呼び出しを一元化したいと思います-テストまたは本番を指すように接続文字列を変更する必要がある場合、この方法でのみ変更できます一箇所。
ベスト プラクティスのアイデア。
ありがとう。
asp.net プロジェクト (4.0) があり、接続文字列にアクセスする最善の方法を見つけようとしています。
web.config ファイルには 2 つの接続文字列があり、1 つは本番用、もう 1 つはテスト用です。多くのaspxページがあり、関数またはある種のグローバル変数による接続の呼び出しを一元化したいと思います-テストまたは本番を指すように接続文字列を変更する必要がある場合、この方法でのみ変更できます一箇所。
ベスト プラクティスのアイデア。
ありがとう。
web.config ファイルには 2 つの接続文字列があり、1 つは本番用、もう 1 つはテスト用です。
これは間違ったアプローチです。あなたがやろうとしているのは、構成ファイルを静的に保ち、環境間でコードを変更することです。これは、すべきこととは逆です。
この場合、構成ファイルに1 つの接続文字列と、2 つの構成ファイル (環境ごとに 1 つ)、または使用しているツールに応じておそらく Web.config 変換が必要です。それぞれの環境は、同じ構成で異なるコードではなく、同じコードで異なる構成を持つという考え方です。
したがって、構成ファイルには次のようなものがあります。
<connectionStrings>
<add name="myConnectionString" connectionString="Data Source=servername;Initial Catalog=databasename;Integrated Security=True" />
</connectionStrings>
(または、実際の接続文字列が何であれ。)
次に、コードで次のようにアクセスします。
ConfigurationManager.ConnectionStrings["myConnectionString"].ConnectionString
各ターゲット環境は、独自の構成ファイルに独自の接続文字列を持つことができますが、環境間でコードを変更する必要はありません。
文字列をカプセル化しようとしているので、その呼び出し全体ConfigurationManager
をどこでも使用する必要はありません。確かにそれを行うことができます。どのようにそれを行うかはあなた次第です。1 つのアプローチは、どこかのオブジェクトに静的フィールドを設定することです。このようなもの:
public class DatabaseHelper
{
public static string ConnectionString
{
get
{
return ConfigurationManager.ConnectionStrings["myConnectionString"].ConnectionString;
}
}
}
次に、コードの他の場所で接続文字列を使用するには、次を使用できます。
DatabaseHelper.ConnectionString
これは間違いなく短いです。接続文字列へのアクセス方法は実際には変わりません。個々の行で使用されるコードの量を減らすために、カスタム オブジェクトの背後にカプセル化しただけです。
DAL (データ アクセス レイヤー) がこれをカプセル化します。選択できるものはたくさんあります: Typed Datasets と TableAdapters は最も古いものの 1 つであり、Entity Framework、NHibernate、Telerik OpenAccess ... 基本的に、接続文字列を取得することは、自分でコードを記述する必要がないものではありません。
また、@ Davidが言ったように、ベストプラクティスは、両方を含むものではなく、構成ごとに別々に管理されたweb.configを持つことです。私たちのアプリでは、web.config 内に "その他の" 接続文字列がありますが、コメント アウトされています。
私はデビッドの反応に賛成しました。しかし、これを会話に追加します。
web.config の app.config に外部ファイルへの「ポインタ」を配置できます。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<connectionStrings configSource="ExternalConnectionStrings.config" />
</configuration>
ExternalConnectionStrings.config の内容
<connectionStrings>
<add name="MainConnectionString"
connectionString="blah blah blah "
providerName="yada.yada.yada" />
</connectionStrings>
環境に基づいて、複数の ExternalConnectionStrings.config ファイルを持つことができます。
ExternalConnectionStrings.Development.config
ExternalConnectionStrings.QA.config
ExternalConnectionStrings.Staging.config
ExternalConnectionStrings.Production.config
「トレードオフ」は、このファイルを手動でコピーする必要があることです (Post Build Event の場合のように)...しかし、それは「クリーン」です。
次に、元の app.config (または web.config) の 1 つの値を変更するだけです。
<configuration>
<connectionStrings configSource="ExternalConnectionStrings.Production.config" />
</configuration>
私はそれをする、または提案する、と言っているのではありません。しかし、私はむしろあなたがこれを行うことを望みます....そして、元の app.config ファイルをハックします。
構成ファイルをスリムでクリーンに保ちます...どの接続文字列が使用されているかを把握しようとしているとき...考えたり、考えたりする必要はありませんいくつかのブードゥーコードを解析してそれを理解してください。