2012-02-10 27 views
2

wpf CustomnameとIsvalidの2つの列を持つリストビューがあります.SQLにlinqを使用してSQLテーブルからデータを取得しています。値をテーブルに更新しようとしています。私はテーブルに何も変更が表示されません。linq to sql変更が反映されない

try 
     { 
      CustomersDataContext dataContext = new CustomersDataContext(); 
      Customer customerRow = MyDataGrid.SelectedItem as Customer; 
      string m = customerRow.CustomerName; 
      Customer customer = (from p in dataContext.Customers 
           where p.CustomerName == customerRow.CustomerName 
           select p).Single(); 

      customer.Isvalid=false; 

      dataContext.SubmitChanges(); 
      MessageBox.Show("Row Updated Successfully."); 

     } 
     catch (Exception Ex) 
     { 
      MessageBox.Show(Ex.Message); 
      return; 
     } 

私は私が選択した顧客名に基づいて、レコードを照会することができていますが、値が更新されていないことがわかります。私は、保存ボタンをクリックしたときに

は、ここに私のコードです。

「ISVALID」の値をデータベースに更新するロジックが欠落している箇所がある場合は、嬉しいです。

+0

IsValidはsqlのboolですか? – Flowerking

+0

ここでは、SQLテーブルの設計です:CustomerName(nvarchar(MAX))IsValid(ビット) – Macnique

答えて

5

まず、using(get_datacontext){...}ブロックはどこですか?あなたが完了したらDataContextを処分する必要があります!とにかく

...

私の推測では、更新文があまりにもタイトな、あるいは単なる間違っているwhere句を生成していることです。

私は、Linq to Sqlデザイナーのマップされたテーブルの各列の 'Update Check'プロパティをチェックしています。最も簡単な方法は、プライマリキー列をAlwaysに設定し、その他はすべてNeverに設定することです。また、WhenChangedに設定することもできます。

デザイナーのデフォルトの動作では、通常、すべての設定でAlwaysに設定されます。これは恐ろしい更新のためのWHERE句を引き起こすだけでなく、場合によっては問題を引き起こす可能性があります。明らかに、このような振る舞いは、適切な並列性チェック(すなわち、2つのスレッドが同じ行を更新する)に必要です。それに注意してください。

ああ、何か考えている - あなたのテーブルにデザイナーで指定されたプライマリキーがない場合でも、この動作を得ることができます。

最後に、SubmitChangesが呼び出されたときに生成されるSQLをチェックすることができます。 TextWriterをDataContext.Logプロパティにアタッチします。またはVS2010のIntelliTraceは、デバッグを開始すると実行されるすべてのADO.Netクエリを収集します。これは、L2Sがうまく動作しない理由をデバッグする上で非常に重要です。

+1

:SQLテーブルにプライマリキーがなく、プライマリキーを設定した後で動作します。 – Macnique

0

更新する顧客を更新顧客のリストに追加する必要があります。変更を保存する前に、db.AddToCustomers(customer)のようなものを実行する必要があります。 AddToCustomersはEFで使用されていますが、LINQで同等のことはわかりません。

+0

こんにちはSOへようこそ:)。 Linqに変更したオブジェクトをSqlに伝える必要はありません。それが変更トラッキングの目的です。 *私の最初のコメントはあまり好きではなく、私はそれを置き換えた。申し訳ありませんが、私はこの質問に答えると、変更トラッキングのことは何も知らなかったのです!* –

+0

:))残念ながら、ご不便をおかけして申し訳ありません;) –

+0

ご不便をおかけしておりません。 –

関連する問題