TOPシステム開発> 第3回:さまざまなデータソースへのアクセス (1/3)

次世代データアクセステクノロジー」

次世代データアクセステクノロジー

第3回:さまざまなデータソースへのアクセス

著者:マイクロソフト  小高 太郎

公開日:2008/1/22(火)

LINQ to SQLにおける「追加」「更新」「削除」の操作とLINQ to Object

LINQはさまざまなデータソースを対象とすることができる。今回は第2回に引き続き、Visual Studioを使った開発手順や手法を解説した後、データベース以外を対象とできるLINQの機能から「LINQ to Object」「LINQ to Xml」を取り上げる。まずはLINQ to SQLにおける「追加」「更新」「削除」などのデータ操作についてみていこう。

データの「追加」「更新」「削除」

「追加」「更新」「削除」はリスト1〜3のプログラムで行うことができる。例えば更新の場合、SQL Serverに発行される実際のSQL文は、更新したい対象のリソースを照会してもロックはかけず、本当に更新が必要になった段階でロックする。

これはいわゆる「オプティミスティック同時実行制御」を考慮したものとなる(オプティミスティック同時実行制御については
http://msdn2.microsoft.com/ja-jp/library/aa0416cz(VS.80).aspx」を参照のこと)。

リスト1:追加の例
static void Main(string[] args)
{
    using(pubsDataContext pubs = new pubsDataContext())
    {
        job Newjob = new job();
        Newjob.job_desc = "Test";
        Newjob.max_lvl = 10;
        Newjob.min_lvl = 10;
        pubs.jobs.Add(Newjob);
        pubs.SubmitChanges();
     }
}

リスト2:更新の例
static void Main(string[] args)
{
    using(pubsDataContext pubs = new pubsDataContext())
    {
        job query =(from j in pubs.jobs
                   where j.job_id == 12
                   select j).Single();
        query.job_desc = query.job_desc + "_1";
        pubs.SubmitChanges();
    }
}

リスト3:削除の例
static void Main(string[] args)
{
    using(pubsDataContext pubs = new pubsDataContext())
    {
        job query =(from j in pubs.jobs
                   where j.job_id == 12
                   select j).Single();
        pubs.jobs.Remove(query);
        pubs.SubmitChanges();
    }
}

ただし、LINQ to SQLを使用したデータの「追加」「更新」「削除」は複数行を同時に操作することが不可能なため、注意しなければならない。

SQL文はどのタイミングでSQL Serverに発行されるのか?「遅延実行」

LINQをはじめてみる方は、selectなどの構文が呼ばれたタイミングでデータの取得を実施していると思われるかもしれない。しかし実際には、LINQによって取得されたデータが使用されるタイミングで、データベースに対するデータの取得が行われているのだ。つまりリスト1の「データの取得」であればforeachループの1回目であり、「追加」「更新」「削除」では、SubmitChangesを行った時点になる。

これは負荷分散のためである。LINQはデータの変形抽出を非常に柔軟に行うことができるため、実際に使用する個々のタイミングでSQLを発行することによって、オーバーヘッドを特定の場所に集中させないような考え方になっている。

例えば、アプリケーションのフォームやページなどの表示の際に使用するオブジェクトをすべて宣言しているようなコードの場合、selectなどの構文が呼ばれた時点でデータの取得を行うと、フォームやページなどの表示の際に一度に全部のSQLがデータベースに対して発行されてしまう。LINQではこうした「オブジェクト」と「データ」の間のタイミングの矛盾を上記の方法で解決しているのである。これを遅延実行や遅延評価と呼ぶ。 次のページ


1   2  3  次のページ


マイクロソフト株式会社 小高 太郎
著者プロフィール
マイクロソフト株式会社  小高 太郎
ERP パッケージ開発に携わり、プログラマーからスタート。Microsoft Universityの講師を兼務、その後、SE、PM、管理職の道に進むも、縁あって2007年3月よりデベロッパー エバンジェリストに転身、現在は開発者向けに様々な技術訴求を行うべく活動中。


INDEX
第3回:さまざまなデータソースへのアクセス
LINQ to SQLにおける「追加」「更新」「削除」の操作とLINQ to Object
  遅延実行の注意点
  LINQ to Object