かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

DLinq + 更新

前回の続きだよ。
DLinqで読み取るだけだとイマイチ(いや便利だけど)だよね。
やっぱり書き戻しもしないとね。

どうやるのか、自動生成されたクラスのメソッドを眺めてみたよ。
そうしたらSystem.Data.Linq.DataContextクラスにSubmitChangesっていうメソッドがあるから使ってみたよ。
前回の例をちょびっと書き換え。

EDU edu = new EDU(@"Server=KAZUKI-PC\SQLEXPRESS;Database=EDU;Integrated Security=true");
edu.Log = Console.Out;

var emps = from emp in edu.Employees
           where emp.ID == 1
           select emp;
foreach (var emp in emps)
{
    emp.Name = "ほげほげ";
}

edu.SubmitChanges();

太郎さんの名前をほげほげに書き換えちゃうイメージだよね。
早速実行。

SELECT [t0].[ID], [t0].[Name], [t0].[DeptID]
FROM [Employees] AS [t0]
WHERE [t0].[ID] = @p0
-- @p0: Input Decimal (Size = 0; Prec = 29; Scale = 4) NOT NULL [1]
SqlProvider\AttributedMetaModel

UPDATE [Employees]
SET [Name] = @p3
FROM [Employees]
WHERE ([Name] = @p0) AND ([DeptID] = @p1) AND ([ID] = @p2)
SELECT NULL AS [EMPTY]
FROM [Employees] AS [t1]
WHERE ((@@ROWCOUNT) > 0) AND ([t1].[ID] = @p4)
-- @p0: Input NVarChar (Size = 2; Prec = 0; Scale = 0) NOT NULL [太郎]
-- @p1: Input Decimal (Size = 0; Prec = 29; Scale = 4) NOT NULL [1]
-- @p2: Input Decimal (Size = 0; Prec = 18; Scale = 0) NOT NULL [1]
-- @p3: Input NVarChar (Size = 4; Prec = 0; Scale = 0) NOT NULL [ほげほげ]
-- @p4: Input Decimal (Size = 0; Prec = 18; Scale = 0) NOT NULL [1]
SqlProvider\AttributedMetaModel

楽観的なロックをかけてるような雰囲気を出してるUPDATE文が発行されたね。
UPDATEはできたけどINSERTとDELETEの方法は、まだ未調査だよ。

眠いから今日はここまで。