2011年02月06日

LINQ to SQL番外編 - 同時実行例外をいつスローさせるのか

   このエントリーをはてなブックマークに追加 Clip to Evernote
LINQ to SQLでは、楽観的同時実行制御の仕組みが組み込まれています。

たとえば、Customersテーブルの行のContactNameカラムをSubmitChangesメソッドで更新する場合、
LINQ to SQLは以下のような UPDATE文を発行します。


パラメータ p0, p1, p2... には、変更前の値が渡されます。
LINQ to SQL では、これによって他のユーザによって変更されていない場合にだけ、
このUPDATE文が成功することになります。
失敗した場合は、System.Data.Linq.ChangeConflictException例外が発生しますので、
他のユーザによる変更を把握できることになります。

SubmitChangesメソッドには引数を持つメソッドがオーバーロードされていて、
この例外が発生するタイミングを以下の2種類から指定できます。

1. 最初の失敗のときにのみ、例外をスローする

2. 失敗したすべての更新についての情報を収集してから、例外をスローする。

具体的な例外発生時の処理を指定したコードを示します。

競合発生した場合、どのような対応ができるのかは、次回説明します。


LINQ to SQL番外編とは
メールマガジン『C#プログラミングレッスン』で連載した「LINQ to SQL編」には書ききれなかった情報を
「番外編」としてブログにアップしています。
併せて、メールマガジン『C#プログラミングレッスン - Linq to SQL編』も読んでいただけると、
より理解が深まると思います。
バックナンバーは、メールマガジン『C#プログラミングレッスン』書庫のページからダウンロードできます。



 

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/gushwell/52120816