Entity Frameworkとは

 今まで見てきたサンプルは、データベースを操作するためにSQL文を使ってきました。.NET Framework3.5では、データベースのデータをプログラムの一部として扱うことができるEntity Frameworkが用意されました。この技術は、ADO.NETを利用して実現されています。

 Entity Frameworkを使うと、データベースに格納するようなデータをオブジェクトやプロパティという形式で扱うことができます。これにより、データベースを意識せずにアプリケーションを構築することができるようになります。

○ プロジェクト

 プロジェクトを作成して確認してみましょう。今回のプロジェクトではUsersテーブルの内容をEntity Frameworkを使って取り出してみましょう。

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

サンプルダウンロード

○ AOD.NET Entity Data Modelの追加

 データベースのデータをEntity Frameworkを使って取り出す準備をしましょう。次の図のようにソリューション エクスプローラーのプロジェクト名をクリックして表示されるメニューより、「追加(D)」―「新しい項目(W)...」をクリックします。

新しい項目をクリック
新しい項目をクリック

 すると次の図のように「新しい項目の追加」ダイアログボックスが表示されるので、左側の一覧から「データ」を、中央のテンプレートの一覧から「ADO.NET Entity Data Model」を選択し、「名前(N):」に「Books」を入力して、「追加(A)」ボタンをクリックしてください。

テンプレートを選択
テンプレートを選択

 次の図のように「Entity Data Model ウィザード」が表示されるので、「モデルに含めるコンテンツ(W)」から「データベースから EF Disigner」を選択して、「次へ(N) >」ボタンをクリックしてください。

コンテンツを選択
コンテンツを選択

 次の図のように「アプリケーションがデータベースへの接続に使用するデータ接続(W)」に「Books.mdf」を選択し、「次へ(N) >」ボタンをクリックしてください。

接続先を選択
接続先を選択

 次のようにメッセージボックスが表示されます。選択したデータベースファイルをプロジェクト内にコピーするかどうかを設定します。今回はコピーせずに使いますので、「いいえ(N)」をクリックしてください。

データファイルコピーの確認
データファイルコピーの確認

 次の図のように「どのバージョンの Entity Framework を使用しますか(W)」に「Entity Framework 6.x」を選択し、「次へ(N) >」ボタンをクリックしてください。

バージョンを選択
バージョンを選択

 次の図のように「モデルに含めるデータベース オブジェクト(W)」で「テーブル」を選択し、配下の項目すべてにチェックが付いていることを確認します。その後、「次へ(N) >」ボタンをクリックしてください。

テーブルを選択
テーブルを選択

 ウィザードが終了し、次のようにソリューション エクスプローラーにファイルが追加されます。

プログラムファイルが追加される
プログラムファイルが追加される

 また、次の図のように各テーブルに対するオブジェクトを表すデザイナーが表示されます。

デザイナーに表示される
デザイナーに表示される

 これで、データを使う準備が整いました。次にプログラミングをしましょう。

○ プログラム

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

Program.cs

  1. static void Main(string[] args)
  2. {
  3.  //コンテキストを生成する
  4.  BooksEntities entities = new BooksEntities();
  5.  //Usersクラスからデータを取得する
  6.  var data = from line in entities.Users
  7.       select line;
  8.  //取得したデータを表示する
  9.  Console.WriteLine("Usersテーブルのデータ一覧");
  10.  Console.WriteLine("ID : ユーザー名 : パスワード : 氏名");
  11.  foreach (var l in data)
  12.  {
  13.   Console.WriteLine("{0} : {1} : {2} : {3}", l.Id, l.UserName, l.Password, l.Name);
  14.  }
  15.  Console.ReadLine();
  16. }

○ 実行結果

Usersテーブルのデータ一覧
ID : ユーザー名 : パスワード : 氏名
1 : sato : csharp : 佐藤
2 : suzuki : spass: 鈴木
3 : takahashi : tpass : 高橋
4 : tanaka : tpass : 田中
5 : itou : ipass : 伊藤
6 : yamamoto : ypass : 山本

○ 解説

 14行目ではDbContextクラスを継承するBooksEntitiesオブジェクトを生成しています。このクラスはADO.NET Entity Data Modelテンプレートを追加するときに自動生成されています。DbContextクラスはデータベースを表すクラスと言えます。そのクラスを継承しているBooksEntitiesクラスは、Booksデータベースを表します。

 17、18行目ではLINQを使ってデータを取り出しています。詳しくは次の節で解説します。

 23~26行目では、data変数をループしてデータを表示しています。data変数にはLINQで取り出したデータのコレクションが格納されています。25行目で一つ一つのレコードを表示しています。

前へ   次へ