前のエントリのプログラムで発行されるSQLを見ているとUPDATE文やDELETE文のSQLのWHERE句が全カラム比較していた。
これじゃあんまりだよ!?って言う時にとる常套手段としては、timestamp型のカラムを作って主キー列とtimestamp型のカラムとのWHEREにするっていうのがある。
LINQ to Entitiesの場合はどうだろう?と思ってテーブルのカラムにtimestamp型のVersionというカラムを付け足してみた。
create table Departments (
ID int IDENTITY(1,1) primary key,
Name nvarchar(100) not null,
Version timestamp not null); -- これ!
create table Employees(
ID int IDENTITY(1,1) primary key,
Name nvarchar(100) not null,
Salary int not null,
DeptID int not null,
Version timestamp not null, -- これ!
constraint FK_EMP_DEPT
foreign key(DeptID) references Departments(ID));
この状態でLINQ to SQLファイルにテーブルをドラッグアンドドロップすると下のようにtimestamp型のカラムだけチェックをするように設定される。
Nameプロパティ |
Versionプロパティ |
|
|
前のエントリのプログラムを動かしてみて発行されるSQLを確認してみると、ちゃんとWHERE句はIDとVersionのカラムだけの比較になってた。
お手軽っぽい。