【ハウツー】

LightSpeedで始める.NETでの光速開発 - 基本編

5 データの取得、更新、削除

    青木淳夫  [2009/01/08]

    レンタルの追加とDVDの更新

    続けて、データを取り出して更新するコードを見てみましょう。ここでは新しいレンタルを作成し、先ほど登録したDVDを関連づけて保存します。

    データを複数件取り出して、更新するプログラム

    private void btnUpdate_Click(object sender, EventArgs e)
    {
      using (LsUnitOfWork uow = _context.CreateUnitOfWork())
      {
        //DVDのリストを取得
        IList<Dvd> list = uow.Find<Dvd>();
    
        //レンタルを生成
        Rental r = new Rental();
        r.DaySpan = 7;
    
        //レンタルに3個のDVDを紐づけ
        r.Dvds.Add(list[0]);
        r.Dvds.Add(list[1]);
        r.Dvds.Add(list[2]);
    
        //(参考)DVDにレンタルを紐づけても同じ
        //list[0].Rental = r;
        //list[1].Rental = r;
        //list[2].Rental = r;
    
        //変更を保存
        uow.SaveChanges();
      }
    }
    

    データの取り出し(複数件SELECT)

    ここでは「Find<Dvd>()」と指定することで、Dvdの全データを取り出しています。複数件のデータを取得するには、UnitOfWorkクラスのFindメソッドを使います。このFindメソッドでは取得するエンティティをパラメータに指定します。

    更新(UPDATE)

    続けてデータを登録/更新します。新しいRentalクラスをインスタンス化し、Dvdsプロパティに3件のDvdを関連づけています。そして、最後に保存(SaveChanges)しています。 ここではRentalクラスをUnitOfWorkクラスに登録(Add)していません。しかしDvdクラスをUnitOfWorkクラスから取り出しているので、Dvdクラスと関連付けられているRentalクラスもUnitOfWorkクラスの管理対象となっています。

    更新結果の確認

    正しくデータが更新されたかテーブルを確認してみましょう。

    データの更新結果(Rentalの挿入とDvdの更新)

    Rentalテーブルにデータが登録され、DvdテーブルのRentalId列が更新されています。UnitOfWorkクラスが、エンティティの状態を判定し、INSERTとUPDATEを振り分けて実行していることが分かります。

    レンタルの削除

    最後に、レンタルのデータを1件取得して削除します。

    データを1件取り出して、削除するプログラム

    //レンタルを取得して削除
    Rental r = uow.FindOne<Rental>(11);
    uow.Remove(r);
    uow.SaveChanges();
    

    データの取り出し(1件SELECT)

    ここでは「FindOne<Rental>(11)」と指定して、RentalクラスのIDが11のデータを取り出しています。1件のデータを取得するには、UnitOfWorkクラスのFindOneメソッドを使います。Findメソッドと同様に取得するエンティティをパラメータに指定します。

    データの削除(DELETE)

    データを削除するには、UnitOfWorkクラスのRemoveメソッドを呼び出します。引数に削除対象のエンティティを指定します。そして、SaveChangesメソッドを呼び出すとDELETE文が実行されます。

    削除結果の確認

    Rentalテーブルのデータが削除され、DvdテーブルのRentalIdがNullに更新されていることが分かります。

    データの削除結果(Rentalの削除とDvdの更新)

    前回のモデル設定(RentalとDvdの関連の設定)で[Is Nullable]プロパティをTrueにセットしているために、Rentalを削除してもDvdは削除されずRentalIdにNullがセットされます。もし[Is Nullable]プロパティをFalseに設定すれば、Dvdのデータも連動して削除されます。

    まとめ

    以上、本編では、UnitOfWorkクラスを使って、エンティティを追加、更新、参照、削除する方法について紹介してきました。次回は、条件を指定してエンティティを抽出するクエリの書き方等について紹介します。

    関連したタグ

    新着記事

    特設サイトの情報

      求人情報

      人気記事

      一覧

      イチオシ記事

      新着記事

      特別企画

      転職ノウハウ

      あなたの仕事適性診断

      4つの診断で、自分の適性を見つめなおそう!

      Heroes File ~挑戦者たち~

      働くこと・挑戦し続けることへの思いを綴ったインタビュー

      はじめての転職診断

      あなたにピッタリのアドバイスを読むことができます。

      転職Q&A

      転職に必要な情報が収集できます

      スカウト転職する

      企業からアプローチのメッセージが届きます。

      マイナビニュースマガジン