2011-08-07 13 views
0

私は非常に珍しい問題があります。私は多くのLINQ-to-SQLを使用するASP.NETアプリケーションを持っており、ほとんどのサーバーで正常に動作します。しかし、アプリケーションは、同じネットワーク上の別のサーバー上に存在し、最近の更新後、私はこのような新しいのDataContextを開くたび:LINQからSQLへのDataContextが特定のサーバーでNULLです

LINQDataContext dc = new LINQDataContext(); 

直流オブジェクトがnullであるので、私は、オブジェクト参照エラーがそれを使用しようとしてもらいます。開発マシンやアプリケーションが存在する他のサーバーでこれを複製することはできません。なぜこのようなことが起こりうるのか、私は困惑しています。何か案は?このような

+0

'dc'はフィールド*(クラス変数)か*ローカル*(メソッド変数)ですか? –

答えて

1

あなたのDataContextの既定のコンストラクタを使用しているので、その後、接続文字列は、Webから読み込まれます。 config。だから、そのサーバー上のアプリケーションが適切な接続文字列を持たない別の設定を持っているという提案をすることができます。しかし、私たちがプロジェクトで直面したもう一つのことがあります。設定ファイルの接続文字列ストレージのASPの新しいバージョンで変更されました。指先でコードを作成する必要はありませんが、constructor that takes connection stringをパラメータとして使用して自分の提案をテストできます。 configから手動で接続文字列を読んだり、テスト目的でハードコードしてください。

1

何かが起こることはできません。あなたは、標準の.NET型にnewオペレーターを呼び出すと、2つの可能性のある結果があります:

  1. コンストラクタが正常に戻って、値が
  2. が割り当てられ、コンストラクタが例外をスローし、値が
  3. が割り当てられていません

すぐに例外をcatch、そしてそれを無視していない限り、あなたは、変数が割り当てられていることを確認することができます。つまり、あなたの問題はおそらく他の場所にあります。

(技術的には、第三の選択肢がある - 。コンストラクタは返さないと無限ループが、それはここでは関係ありません決して)

+0

実際には、意図的に細工された*端の場合、クラスに対して "new"をnullにすることはできますが、データコンテキストに対してはできません。狂気のためだけに言及されています(この質問には当てはまりません)。あなたがしたい場合は、例を掘り出してください;)編集:それはここにあります:http://stackoverflow.com/questions/194484/whats-the-strangest-corner-case-youve-seen-in-c-or-net/ –

+0

@Marc、本当に興味深い。 – svick