2010-12-02 21 views
1

このクエリを直接使用するか、db.ExecuteCommand()を使用すると、すべて正常に動作します。LINQ to SQLを使用して更新/セットを実行する

var s= db.Area.Single(s => s.ID == 666 && s.Code == 36003 && s.NID == 1); 
s.EndDate = null; 
db.SubmitChanges(); 

update Market..Area set EndDate = NULL where ID = 666 and NID =1 and Code = 36003 

しかし、私は、私はすべてのは、彼らが動作するはずのように思えるいくつかの異なる方法を試してみたSQLにLINQでこれを行うように見えるカント、ここでは1例です私はこれを得るために他に何をしようとしているのかわかりません。

EDIT

私は一つのアイテムだけ

答えて

1

エリアテーブルにプライマリキーが定義されていますか? Linq 2 SQLは、主キーが定義されていないテーブルを更新しません。 (そして、私が覚えている限り、それは静かに失敗するでしょう)。

+0

ああ、私の推測する問題がある。主キーはありません。だから、それをする方法が全くないということですね? – James

+1

あります。モデルファイル(.dbml)に主キーを定義してみることができます。 – CGK

0

あなたが複数の項目を更新したいですかを編集しようとしていますか?

IQueryable<Area> iArea = 
    from s in db.Area 
    where s.ID == 666 && s.Code == 36003 && s.NID == 1 
    select s; 

iArea.ToList().ForEach(item => { item.EndDate = null; }); 

db.SubmitChanges(); 
+0

ええ、私は一度に1つのアイテムを更新しています。何らかの理由でコードがまだ動かない。それはコンパイルして正常に動作しますが、EndDateをnullに変更する動作は起こりません。 – James

0

バッチ更新を行う方法はありません。しかし、this blogからいくつかのバッチ拡張を選択することができます。

0

構文が正しいようです。私が考えることができるのは、同じデータ・コンテキスト内で複数の更新を実行しようとしている場合だけです。これを試してください:

using (DataContext db = new DataContext()) 
{ 
    var s = db.Area.Single(s => s.ID == 666 && s.Code == 36003 && s.NID == 1); 

    s.EndDate = null; 
    db.SubmitChanges(); 
} 
関連する問題