かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

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の方法は、まだ未調査だよ。

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