ステップ 6:モデル・クラスの使用
では、データベースからいくつかのデータを表示するためにNorthwindモデル・クラスを使用する(非常に)簡単なページを書いてみましょう。
まずASP.NETプロジェクトに新しいページを追加します。Webプロジェクト上で右クリックし、[追加]-[新しい項目]を選択し、マスターページを使用したWebフォーム項目テンプレートを選択します。そのページにProducts.aspxという名前をつけて、デフォルトでASP.NET Webプロジェクトスターターテンプレートに含まれているSite.masterマスターページを使用するようにします。
新しいProducts.aspxページに<asp:GridView>コントロールを追加します。Productsの名前と価格だけ表示されるように構成します。
そしてコードビハインド・ファイル内でモデル・クラスに対して以下のLINQクエリを書くとすべてのアクティブな製品をデータベースから取得して上記のGridViewコントロールにバインドできます。

これでプロジェクトを実行しProducts.aspxを表示させると、次のようなProductsの一覧が得られます。

これで既存のデータベースに対してEF『コード・ファースト』を使用する簡単なアプリケーションができました。
ダウンロードサンプル
上記サンプルの完成版はここからダウンロードできます。EF『コード・ファースト』 CTP4とSQL Expressがインストールされていることが前提になっています。
追加のコード例
その他のよくあるシナリオでNorthwindモデルをどのように使用できるかを表した追加のコード例を、いくつか紹介します。
リレーション間のクエリ
以下のLINQクエリはそれぞれが属するCategory名に基づいて一連のProductオブジェクトを取得するところを表しています。着目して欲しいのは、Productとその関連のCategoryオブジェクトのサブプロパティの両方をSPANするLINQクエリをどのように書いているかです。その実際のフィルタはデータベースエンジン自身ですべて完了しているので、Productオブジェクトはただ中間層に戻されるだけです(効率化のため)。

1つのProductを取得するためにFindメソッドを使用
LINQクエリが書けるだけでなく、EF『コード・ファースト』はDbSet<T>コレクションでFind()メソッドのサポートもしているので、次のようなコードを書いてそのIDに基づく1つのインスタンスを取得できます。

新しいCategoryの挿入
以下のコードは新しいCategoryをデータベースへ追加する方法を示しています。

どのようにCategoryオブジェクトを作成し、それにプロパティを割り当てた後、コンテキストのCategoriesコレクションにそれを追加するのかを確認してください。その後、SaveChanges()をコンテキスト上で呼び出し、データベースへ更新を永続化できます。
新しいCategoryとProduct(および関連するもの)の挿入
以下のコードは、新しいCategoryと新しいProductを作成し、その新しいCategoryに帰属させるためにProductを関連付けて、その後データベースに両方を保存する方法を表しています。

上記では、どのように、そのCategoryインスタンスをポイントするCategoryプロパティを割り当てることで新しく作成されたCategoryを参照する新しいProductを持てるのかを確認してください。明示的にCategoryID外部キープロパティを設定する必要ありません。これは自動的にデータベースへ変更が永続化された時に行われます。
EFは作業単位と呼ばれるパターンを使用しています。これはコンテキストへ複数の変更を記録して、SaveChanges()が呼ばれた時に1つの単体トランザクションですべてを一緒に永続化できるという意味です(つまりすべての変更が成功するかどれも成功しないかということです)。これにより簡単にデータベースを(いくつかの変更が適用されそれ以外がされていないような)矛盾した状態のままにならないようにできます。
上記のコードスニペットではCategoryとProductの両方が永続化されるか、どちらもされない(そして例外が発生)かのいずれかになります。
Productを更新して再保存
以下のコードはProductを取得して更新し、データベースへそれを再保存する方法を示しています。前にFind()メソッドを使用してProductIDに基づいた製品を取得する方法を示しました。以下はそのProductNameに基づく特定の製品を取得するLINQクエリを使用しています。

(すべての既存のオブジェクトに対する)変更(または新しい追加も)はいくらでもできます。SaveChanges()を呼び出したとき、1つのトランザクションですべてがデータベースに永続化されます。

