Entity Frameworkでのデータ更新

 この節では、Entity Frameworkを使ってデータベースのデータを変更する方法を見てみましょう。SQL文でUPDATE文に該当します。

 データを更新するにはLINQの命令文ではなく、Entity Data Modelで追加したテーブルに対応するオブジェクトのデータを変更し、その後、DbContextクラスのSaveChangesメソッドでデータベースに反映させます。

○ プロジェクト

 プロジェクトを作成して確認してみましょう。

プロジェクトの種類 コンソール アプリケーション
プロジェクト名 EntityUpdateTest

サンプルダウンロード

○ 作成の準備

 「EntityInsertTest」プロジェクトを修正して作成しましょう。EntityInsertTestフォルダーをコピーして、作成するプロジェクト名にフォルダー名を変更してください。

○ プログラム

 Mainメソッドを次のように記述してください。

Program.cs

  1. static void Main(string[] args)
  2. {
  3.  //コンテキストを生成する
  4.  BooksEntities entities = new BooksEntities();
  5.  //Usersテーブルのデータを取得する
  6.  var data = from users in entities.Users
  7.      select users;
  8.  //一覧を表示する
  9.  Console.WriteLine("次の一覧からパスワードを変更したいIDを選んでください。");
  10.  foreach (var line in data)
  11.  {
  12.   Console.WriteLine("ID:{0} 氏名:{1}", line.Id, line.Name);
  13.  }
  14.  //変更するデータを入力する
  15.  Console.Write("ID:");
  16.  int id = Int32.Parse(Console.ReadLine());
  17.  Console.Write("パスワード:");
  18.  string password = Console.ReadLine();
  19.  //選択したIDのデータを取得する
  20.  var updatedata = entities.Users.Single(x => x.Id == id);
  21.  //取得したデータのパスワードを変更する
  22.  updatedata.Password = password;
  23.  //データベースに反映させる
  24.  entities.SaveChanges();
  25.  Console.WriteLine("更新しました。");
  26.  Console.ReadLine();
  27. }

○ 実行結果

次の一覧からパスワードを変更したいIDを選んでください。
ID:1 氏名:佐藤
ID:2 氏名:鈴木
ID:3 氏名:高橋
ID:4 氏名:田中
ID:5 氏名:伊藤
ID:6 氏名:山本
ID:7 氏名:中村
ID:2
パスワード:linqtoentities
更新しました。

データが更新された
データが更新された

○ 解説

 34行目では、変更するデータを取得しています。BooksEntitiesオブジェクトにあるUsersコレクションのSingleメソッドは特定の要素を返します。複数ある場合は例外がスローされます。今回は引数にラムダ式を指定しています。ラムダ式は、取得するデータの条件を簡潔に書くことができます。今回はID列のデータが入力したIDと等しいという条件を与えています。

 37行目で取得したデータのPasswordプロパティを変更しています。その後、40行目のBooksEntitiesオブジェクトのSaveChangesメソッドにより、データベースに変更が反映されます。

前へ   次へ