2009-07-27 9 views
13

環境変数に基づいてLinqの接続文字列をSqlに設定する必要があります。私は環境変数に基づいてweb.configから接続文字列を返す関数を持っていますが、どのようにLinqに常にこの "動的に作成された"接続文字列を使うようにしますか?Linq to Sql - 環境変数に基づいて接続文字列を動的に設定する

私はコンストラクタを使用して接続文字列を指定できますが、LinqDataSourceでdatacontextを使用するとどのように動作するのでしょうか?

答えて

18

用途:LinqDataSourceコントロールのために

MyDataClassesDataContext db = new MyDataClassesDataContext(dynamicConnString); 

、ContextCreatingイベントインターセプトと、上記のように、手動でのDataContextを作成します。

protected void LinqDataSource_ContextCreating(object sender, LinqDataSourceContextEventArgs e) 
{ 
    e.ObjectInstance = new MyDataClassesDataContext (dynamicConnString); 
} 

MSDNから:

デフォルトでは、LinqDataSourceコントロールコントロール は、のタイプのインスタンスを作成します。 ContextTypeName プロパティでが指定されています。 LinqDataSourceコントロール は、 データコンテキストオブジェクトのデフォルトコンストラクタを呼び出して、オブジェクトの インスタンスを作成します。 デフォルト以外の コンストラクタを使用する必要があるか、またはContextTypeName プロパティで指定されている とは異なる オブジェクトを作成する必要があります。この場合、 はContextCreatingイベントを処理し、 は手動でデータコンテキスト オブジェクトを作成する必要があります。

+0

LinqDataSourceでDataContextを使用する場合、これは機能しますか?例えば、私はここで、接続文字列を設定する方法を: Ryan

+0

をそれはい、できます。編集されました。 – JoshJordan

2

DataContextクラスには、constructor that takes in a connection stringがあります。

+0

LinqDataSourceでDataContextを使用する場合、これは機能しますか?たとえば、ここで接続文字列を設定するにはどうすればいいですか: Ryan

+0

はいジョシュはすでに説明した通りです。元の質問にこれを指定する必要があります。 – RichardOD

6
  • は、LINQ to SQLデザイナを開き、この記事を参照して、デザイナー(スキーマ自体)の[プロパティ]タブを開いて、接続を展開し、にApplication Settingsを設定してくださいFalse。セーブ。

  • これを閉じて、DataContextデザイナーファイル(dbml_name.designer.cs)を開き、DataContextコンストラクターを変更します。アプリケーション全体の設定を無効にしたときに、接続文字列がここにジャンプする方法がすぐにわかります。だから、ここで焦点を当てる部分はbase()継承者を変更することです。あなた自身に合わせて以下の名前をConnStringに変更してください。私はまた、クラスにはDatabaseAttributeがあることに気付きました。私はそれが大きな役割を果たしているとは思わないし、接続設定に何らかの影響があります。

    公共dbDataContext():ベース(ConfigurationManager.ConnectionStrings [ "MyConnString"]のConnectionString、mappingSource。)

  • 開きますLINQプロジェクトで特色App.configまたはWeb.configまたSystem.Configurationへの参照が必要になりますSQLクラスが常駐し、接続文字列の名前を"MyConnString"という名前に変更します。

  • あなたは今、それが重要であるなどの名前の変更とエントリ全体をカットして、このようなWebアプリケーション、SilverlightのようなデータをアクセスするアプリケーションのApp.configWeb.configのいずれかにそれを貼り付け、WPF、WCFしなければなりませんLINQ to SQLクラスに定義されているConfigurationManagerが、呼び出すアプリケーションが実行されている場所の.configファイルをLINQからSQLのクラスに関係なく検索するため、データにアクセスする呼び出しアプリケーションの構成ファイルを変更する定義されました。ご覧のとおり、これまでとは少し違った働きをしています。

  • 右クリックし、LINQ to SQLクラスを含むDALまたはプロジェクトのプロパティを開き、[設定]タブの接続の文字列「アプリケーションの設定」の参照を削除します。

  • リビルド。すべての作業が完了しました。ファイルの検索で、データベース名が接続文字列に含まれていることを知っていれば、ストラングラーをチェックしてください。

関連する問題