かるあ のメモ

アクセスカウンタ

zoom RSS LINQ と同時実行制御

<<   作成日時 : 2007/09/23 12:24   >>

ブログ気持玉 0 / トラックバック 0 / コメント 0

LINQ と同時実行制制御

仕事ではこの頃やっと .NET 2.0 に入ってきた感じなので ADO.NET 2.0 ってほとんど触ったことがなかったんですよね。
で TechEd のときに購入して積まれていた プログラミングMicrosoft ADO.NET2.0 を読みながら TableAdapter の同時実行制御を読んで、LINQ to SQL が吐き出す Update文 がなぜあんなことになるのかやっと理解した(汗

たとえば次のようなテーブルに対して LINQ to SQL で Update をかける場合、
画像

こんなコーディングをすると次のような SQL を吐き出す。
Dim db = New comuplusDataContext()
db.Log = Console.Out
Dim query = From u In db.User _
                    Where u.UserID = TextBox1.Text _
                    Select u
query.Single().UserName &= DateTime.Now.ToString()
db.SubmitChanges()
UPDATE [dbo].[User]
SET [UserName] = @p5
WHERE ([UserID] = @p0) AND ([UserName] = @p1) AND ([PostNo] = @p2) AND ([PostSubNo] = @p3) AND ([UpdateDate] = @p4)
これは User テーブルに TimeStamp 列が含まれていないため、全列の変更をチェックして変更がないことを保証している。
なので User テーブルの UpdateDate 列を TimeStamp に変更すると、実行される SQL は次のようになる。
SELECT [t1].[UpdateDate]
FROM [dbo].[User] AS [t1]
WHERE ((@@ROWCOUNT) > 0) AND ([t1].[UserID] = @p3)

とはいえ、そうそうデータベース構造を変えられるわけでもなく、そんな場合は dbml に定義された各テーブルのメンバー情報を変更することで対応できます。
画像

Update Check や Time Stamp プロパティを変更することで吐き出される SQL が変わってくる。
プログラミングMicrosoft ADO.NET2.0 (マイクロソフト公式解説書)
プログラミング MS ADO .NET2.0 (マイクロソフト公式解説書)

テーマ

注目テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
LINQ と同時実行制御 かるあ のメモ/BIGLOBEウェブリブログ
文字サイズ:       閉じる