2

私は通常、すべての構成をレジストリに保存します。LINQの使用を開始しましたが、DSNをweb.configに含めたくはありませんが、DSNをレジストリに残して、(おそらくアプリケーション開始イベントで)SystemConfigにアタッチします。

これはどのように行うことができますか?

どんなアイデアにも感謝します!

編集:明確にするために:web.configファイルに書き込みたくない、web.config以外の場所にdsn(暗号化)を保持したいので、すべての開発段階で同じweb.configを使用します(ローカル、staginf、ライブ、バックアップ)。

クリストフ

VB.Netのソリューションコード:

1)元のDatacontextから継承する1つのメソッドを使用して、新しいクラスを追加します。

Public Class MyDatabaseDataContext

Inherits DatabaseDataContext

Public Sub New()
    MyBase.New(Settings.DSN)
End Sub

 End Class

2)元のコンテキストの代わりに、すべてのLinqデータソースでこのクラスを使用します。

 ContextTypeName="MyProject.MyDatabaseDataContext
4

3 に答える 3

1

web.config で暗号化を維持しないのはなぜですか? Application_Startを使用したくない場合は、web.config の接続文字列だけを暗号化するのはかなり簡単ですaspreg_iis。IIS 管理ツールを使用して、後で暗号化された web.config を編集することもできます。

Configuration config = WebConfigurationManager.OpenWebConfiguration(
                               HttpContext.Current.Request.ApplicationPath );
ConfigurationSection section = config.Sections["connectionStrings"];
if (!section.SectionInformation.IsProtected
    && !GlobalConfiguration.ApplicationVersion.EndsWith( "dev" )) // don't encrypt dev
{
    section.SectionInformation.ProtectSection( "DataProtectionConfigurationProvider" );
    config.Save();
}

レジストリに保存する必要がある場合。接続文字列を受け取り、レジストリから読み取った値を渡す DataContext のコンストラクターをいつでも使用できます。おそらく、これをアプリケーション ストアに保存するので、レジストリから読み取る必要があるのは 1 回だけです。

ほとんどの例でaspreg_iis. Application_Start誤って暗号化することを忘れないように、私はそれを行うことを好みます。

于 2008-11-05T03:12:22.627 に答える
1

これが私がすることです。DataContext の基本クラスがあります。これは DataContextBase と呼ばれ、sqlmetal.exe によって生成されます。Linq 呼び出しで使用される DataContext という派生クラスがあります。次のようになります。

public class DataContext : DataContextBase
{
    public DataContext()
        : base(ConnectionHolder.ConnectionString)
    {
    }
}

私のライブラリには、接続文字列を格納する ConnectionHolder という静的クラスがあります。

public static class ConnectionHolder
{
    static string _ConnectionString;

    public static string ConnectionString
    {
        get { return _ConnectionString; }
        set { _ConnectionString = value; }
    }
}

(注: これは、接続文字列を使用する Linq 以外のアプリ内の場所があるため、DataContext とは別のものです)。アプリの起動時に、 ConnectionHolder.ConnectionString = (接続文字列を保存する場所) と言います。

于 2008-11-05T15:17:57.000 に答える
0

これは、レガシ コードを使用する場合、かなり妥当な要件です。

DataContext クラスは部分クラスなので、構成設定をロードして datacontext の結果を作成する静的ファクトリ メソッドを追加するだけです。

于 2008-11-06T08:03:54.037 に答える