2011-06-27 9 views
2

私は大規模な支援が必要です。私は1時間もプロジェクトに費やす時間がないときは、一日を過ごしました。私は、SQLデータ層へのLINQを持っているし、次のコードを使用してDBへの簡単な挿入をしています:私は、データベースの変更を行うことができないため、他のレガシーコードにLinq to SQL NOT NULLを挿入すると "NULL値を挿入できません"

using (var odc = new OrdersDataContext()) 
     { 
      try 
      { 
       var id = GetNextOrderId(odc); 
       order.ID = id; 
       odc.tblOrders.InsertOnSubmit(order); 
       odc.SubmitChanges(); 
      } 
      catch (Exception ex) 
      { 
       Logger.LogException(ex); 
      } 
     } 

をし、これがSQL 2000上で実行されているデータベースであることしかし、このコードはある時点で正常に動作していて、単純に動作を停止しました。

カラム 'ID'、テーブル 'Order'に値NULLを挿入できません。列はNULLを許可しません。 INSERTは失敗します。

コードからわかるように、私がコードをステップ実行するときに私が見ることができるところでは、ID列は有効なID番号を取得しています。 何らかの理由でIDフィールドを設定していても、このコードがより前に正常に機能していても、nullとして挿入しようとしています。私はこれまでデータベースを完全に復元してデータレイヤーを再構築しましたが、役に立たなかったのです。

私は自分自身の横にあるので、これと時間外に困っています。

+1

GetNextOrderId(odc)は例外をスローせずにnullを返す可能性はまったくありません。 – jpm

+1

プロファイラを実行して、どのSQLが生成されてDBに送信されているか確認してみましたか? – kprobst

+0

jpm ... IDは、InsertOnSubmitメソッドに入るまで完全に設定されていますが、null値を送信しようとします。何らかの理由で私の前提に値が設定されていない、オブジェクト全体がnullとして処理されているのですが、なぜその理由が分かりません。この時点では、キャッシュされたバージョンのコードがどこかで使用されていることが原因であると想定しなければなりません。他に何の意味もありません。 – webwires

答えて

1

この回答は非常に奇妙で、私は100%確信しているわけではありません。基本的には、LINQ to SQLデータレイヤーを完全に再構築し(デザイナーで同じテーブルをドラッグアンドドロップするだけで)、ソリューション全体を完全にクリーニングして再構築しました。その後、コードは魔法のように再び働いた。コードを変更する必要はありません。

何らかの理由で、コードが不適切にキャッシュされ、オブジェクトがデータレイヤーに転送できなくなりました(私の推測です)。その場合、戻ってくるのは奇妙なエラーのようです。

関連する問題