Model First
このビデオとステップバイステップのチュートリアルでは、Entity Framework を使用した Model First 開発の概要を説明します。 Model First を使用すると、Entity Framework Designer を使用して新しいモデルを作成し、そのモデルからデータベース スキーマを生成できます。 モデルは EDMX ファイル (.edmx 拡張子) に保存され、Entity Framework Designer で表示および編集できます。 アプリケーションで操作するクラスは、EDMX ファイルから自動的に生成されます。
ビデオを見る
このビデオとステップバイステップのチュートリアルでは、Entity Framework を使用した Model First 開発の概要を説明します。 Model First を使用すると、Entity Framework Designer を使用して新しいモデルを作成し、そのモデルからデータベース スキーマを生成できます。 モデルは EDMX ファイル (.edmx 拡張子) に保存され、Entity Framework Designer で表示および編集できます。 アプリケーションで操作するクラスは、EDMX ファイルから自動的に生成されます。
提供: Rowan Miller
前提条件
このチュートリアルを実行するには、Visual Studio 2010 または Visual Studio 2012 がインストールされている必要があります。
Visual Studio 2010 を使用している場合は、NuGet もインストールされている必要があります。
1. アプリケーションを作成する
わかりやすくするために、Model First を使用してデータ アクセスを実行する基本的なコンソール アプリケーションを構築します。
- Visual Studio を開きます
- [ファイル] -> [新規作成] -> [プロジェクト]
- 左側のメニューから [Windows] を選択し、[コンソール アプリケーション] を選択します。
- 名前として「ModelFirstSample」と入力します。
- [OK] を選択します。
2. モデルを作成する
Visual Studio の一部として含まれている Entity Framework Designer を使用してモデルを作成します。
[プロジェクト] -> [新しい項目の追加...] を選択します。
左側のメニューから [データ] を選び、[ADO.NET Entity Data Model] を選びます
名前として「BloggingModel」と入力し、[OK] をクリックします。これにより、Entity Data Model ウィザードが起動します。
[空のモデル] を選択し、[完了] をクリックします。
Entity Framework Designer が空のモデルで開きます。 これで、エンティティ、プロパティ、関連付けをモデルに追加できます。
デザイン サーフェイスを右クリックし、[プロパティ] を選択します。
[プロパティ] ウィンドウで、[エンティティ コンテナー名] を BloggingContext に変更します。"これは、自動的に生成される派生コンテキストの名前です。このコンテキストはデータベースとのセッションを表し、クエリを実行してデータを保存できるようにします。"
デザイン サーフェイスを右クリックし、[新規追加] -> [エンティティ] の順に選択します。
エンティティ名として「Blog」、キー名として「BlogId」と入力し、[OK] をクリックします。
デザイン サーフェイスで新しいエンティティを右クリックし、[新規追加] -> [スカラー プロパティ] の順に選択します。プロパティの名前として「Name」と入力します。
このプロセスを繰り返して、Url プロパティを追加します。
デザイン サーフェイスで Url プロパティを右クリックし、[プロパティ] を選択します。[プロパティ] ウィンドウで、[Null 許容] 設定を True に変更します。"これにより、Url を割り当てずに Blog をデータベースに保存できます。"
先ほど学習した方法を使用して、Post エンティティと PostId キー プロパティを追加します。
Post エンティティに、Title および Content スカラー プロパティを追加します。
2 つのエンティティが作成されたので、次に、それらの間の関連付け (またはリレーションシップ) を追加します。
デザイン サーフェイスを右クリックし、[新規追加] -> [関連付け] の順に選択します。
リレーションシップの一方の端が、複数要素の接続性を 1 に設定した Blog を指すようにし、もう一方の端が、複数要素の接続性を多に設定した Post を指すようにします。"これは、1 つの Blog に多数の Post があり、1 つの Post は 1 つの Blog に属することを意味します。"
['Post' エンティティへの外部キー プロパティの追加] ボックスがオンになっていることを確認し、[OK] をクリックします。
これで、データベースを生成し、データの読み取りと書き込みに使用できる単純なモデルが作成されました。
Visual Studio 2010 での追加の手順
Visual Studio 2010 で作業している場合は、最新バージョンの Entity Framework にアップグレードするために従う必要がある追加の手順がいくつかあります。 アップグレードが重要なのは、改善されてはるかに使いやすくなり、最新のバグ修正も適用された API サーフェイスにアクセスできるためです。
まず、NuGet から最新バージョンの Entity Framework を取得する必要があります。
- [プロジェクト] -> [NuGet パッケージの管理] の順に移動します。"[NuGet パッケージの管理] オプションが表示されない場合は、最新バージョンの NuGet をインストールする必要があります。"
- [オンライン] タブを選択します
- EntityFramework パッケージを選択します。
- [インストール]をクリックします。
次に、モデルを入れ替えて、新しいバージョンの Entity Framework で導入された DbContext API を使用するコードを生成する必要があります。
EF Designer でモデルの空いている場所を右クリックし、[コード生成項目の追加] を選択します。
左側のメニューから [オンライン テンプレート] を選び、DbContext を検索します。
[C# 用 EF 5.x DbContext ジェネレーター] を選択し、名前として「BloggingModel」と入力して、[追加] をクリックします
3. データベースを生成する
モデルを指定すると、Entity Framework では、そのモデルを使用してデータを保存および取得できるようにするデータベース スキーマを計算できます。
Visual Studio と共にインストールされるデータベース サーバーは、インストールされている Visual Studio のバージョンによって異なります。
- Visual Studio 2010 を使用している場合は、SQL Express データベースを作成します。
- Visual Studio 2012 を使っている場合は、LocalDB データベースを作成します。
それではデータベースを生成しましょう。
デザイン サーフェイスを右クリックし、[モデルからデータベースを生成] を選択します。
[新しい接続] をクリックし、使用している Visual Studio のバージョンに応じて、LocalDB または SQL Express を指定します。データベース名として「ModelFirst.Blogging」と入力します。
[OK] を選択すると、新しいデータベースを作成するかどうかを確認するメッセージが表示されます。[はい] を選択します。
[次へ] を選択すると、Entity Framework Designer によって、データベース スキーマを作成するスクリプトが計算されます。
スクリプトが表示されたら、[完了] をクリックします。スクリプトがプロジェクトに追加され、開かれます。
スクリプトを右クリックし、[実行] を選択すると、接続先のデータベースを指定するよう求められます。使用している Visual Studio のバージョンに応じて、LocalDB または SQL Server Express を指定します。
4.データの読み取りと書き込み
モデルを用意できたので、それを使用してデータにアクセスしてみましょう。 データへのアクセスに使用するクラスは、EDMX ファイルに基づいて自動的に生成されます。
"このスクリーンショットは、Visual Studio 2012 のものです。Visual Studio 2010 を使用している場合、BloggingModel.tt ファイルと BloggingModel.Context.tt ファイルは、EDMX ファイルの下に入れ子になっているのではなく、プロジェクトの直下にあります。"
次に示すように、Program.cs に Main メソッドを実装します。 このコードでは、コンテキストの新しいインスタンスを作成し、それを使用して新しい Blog を挿入します。 次に、LINQ クエリを使用して、データベースから、Title のアルファベット順に並べ替えられたすべての Blog を取得します。
class Program
{
static void Main(string[] args)
{
using (var db = new BloggingContext())
{
// Create and save a new Blog
Console.Write("Enter a name for a new Blog: ");
var name = Console.ReadLine();
var blog = new Blog { Name = name };
db.Blogs.Add(blog);
db.SaveChanges();
// Display all Blogs from the database
var query = from b in db.Blogs
orderby b.Name
select b;
Console.WriteLine("All blogs in the database:");
foreach (var item in query)
{
Console.WriteLine(item.Name);
}
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}
}
}
これで、アプリケーションを実行してテストできるようになりました。
Enter a name for a new Blog: ADO.NET Blog
All blogs in the database:
ADO.NET Blog
Press any key to exit...
5. モデルの変更を処理する
次に、モデルに変更を加えます。これらの変更を加えたら、データベース スキーマを更新することも必要です。
まず、モデルに新しい User エンティティを追加します。
キー名として Username、キーのプロパティの種類として [文字列] を指定して、User という名前の新しいエンティティを追加します。
デザイン サーフェイスで Username プロパティを右クリックし、[プロパティ] を選択します。[プロパティ] ウィンドウで、MaxLength 設定を 50 に変更します。"これにより、Username に保存できるデータが 50 文字に制限されます。"
User エンティティに、DisplayName スカラー プロパティを追加します。
モデルが更新されたので、データベースを更新して新しい User エンティティ型に対応する準備ができました。
- デザイン サーフェイスを右クリックし、[モデルからデータベースを生成] を選択します。Entity Framework によって、更新されたモデルに基づいてスキーマを再作成するスクリプトが計算されます。
- [完了] をクリックします。
- 既存の DDL スクリプトの上書きと、モデルのマッピングおよびストレージ部分の上書きに関する警告が表示される場合があります。どちらの警告でも [はい] をクリックします。
- データベースを作成するための更新された SQL スクリプトが自動的に開きます。
生成されたスクリプトでは、既存のすべてのテーブルを削除し、スキーマを一から再作成します。 これはローカル開発では役立つ場合がありますが、既に配置されているデータベースに変更をプッシュする場合には使用できません。 既に配置されているデータベースに変更を発行する必要がある場合は、スクリプトを編集するか、スキーマ比較ツールを使用して移行スクリプトを計算する必要があります。 - スクリプトを右クリックし、[実行] を選択すると、接続先のデータベースを指定するよう求められます。使用している Visual Studio のバージョンに応じて、LocalDB または SQL Server Express を指定します。
まとめ
このチュートリアルでは、EF Designer でモデルを作成し、そのモデルからデータベースを生成できる、Model First 開発について説明しました。 次に、モデルを使用して、データベースに対してデータの読み取りと書き込みを行いました。 最後に、モデルを更新し、モデルに合わせてデータベース スキーマを再作成しました。
.NET