このビデオと詳細なチュートリアルでは、Entity Framework を使用した Model First 開発の概要について説明します。 Model First では、Entity Framework デザイナーを使用して新しいモデルを作成し、モデルからデータベース スキーマを生成できます。 モデルは EDMX ファイル (.edmx 拡張子) に格納され、Entity Framework デザイナーで表示および編集できます。 アプリケーションで操作するクラスは、EDMX ファイルから自動的に生成されます。
ビデオを見る
このビデオと詳細なチュートリアルでは、Entity Framework を使用した Model First 開発の概要について説明します。 Model First では、Entity Framework デザイナーを使用して新しいモデルを作成し、モデルからデータベース スキーマを生成できます。 モデルは EDMX ファイル (.edmx 拡張子) に格納され、Entity Framework デザイナーで表示および編集できます。 アプリケーションで操作するクラスは、EDMX ファイルから自動的に生成されます。
発表者: ローワン・ミラー
前提条件
このチュートリアルを完了するには、Visual Studio 2010 または Visual Studio 2012 をインストールする必要があります。
Visual Studio 2010 を使用している場合は、 NuGet もインストールする必要があります。
1. アプリケーションを作成する
簡単にするために、Model First を使用してデータ アクセスを実行する基本的なコンソール アプリケーションを構築します。
- Visual Studio を開く
- ファイル -> 新規 -> プロジェクト...
- 左側のメニューとコンソール アプリケーションから Windows を選択する
- 名前として ModelFirstSample を入力します
- [OK] を選択します。
2. モデルの作成
ここでは、Visual Studio の一部として含まれている Entity Framework Designer を使用して、モデルを作成します。
Project -> 新しい項目の追加...
左側のメニューから [データ] を選択し、エンティティ データ モデル ADO.NET します
名前として 「BloggingModel 」と入力し、[ OK] をクリックすると、エンティティ データ モデル ウィザードが起動します
空のモデルを選択し、完了をクリックします
Entity Framework デザイナーが空のモデルで開かれます。 これで、モデルへのエンティティ、プロパティ、および関連付けの追加を開始できます。
デザイン 画面を右クリックし、[プロパティ] を選択します。
[プロパティ] ウィンドウでエンティティ コンテナー名を BloggingContext に変更します。これは、自動的に生成される派生コンテキストの名前であり、コンテキストはデータベースとのセッションを表し、データのクエリと保存を行えます。
デザイン 画面を右クリックし、[Add New -> Entity...] を選択します。
エンティティ名として Blog を入力し、キー名として BlogId を入力し、[OK] をクリックします。
デザイン画面で新しいエンティティを右クリックし、[新規追加] -> [スカラー プロパティ] を選択し、プロパティの名前として 「Name」 と入力します。
Url プロパティを追加するには、このプロセスを繰り返します。
デザイン画面で URL プロパティを右クリックし、[プロパティ] を選択します。[プロパティ] ウィンドウで Null 許容設定を True に変更します。これにより、ブログを URL を割り当てずにデータベースに保存できます。
先ほど学習した手法を使用して、 PostId キー プロパティを持つ Post エンティティを 追加します
Post エンティティに Title および Content スカラー プロパティを追加する
いくつかのエンティティが作成されたので、それらの間に関連付け (またはリレーションシップ) を追加します。
デザインサーフェスを右クリックして、Add New -> Association... を選択します。
リレーションシップの一方の端を多重度が1つのブログに設定し、もう一方の端を多重度が多い投稿に設定します。これは、ブログには多くの投稿があり、投稿は1つのブログに属することを意味します
[ 外部キーのプロパティを 'Post' エンティティに追加 する] チェック ボックスがオンになっていることを確認し、[OK] をクリック します
これで、データの読み取りと書き込みに使用するデータベースを生成できる単純なモデルが作成されました。
Visual Studio 2010 の追加手順
Visual Studio 2010 で作業している場合は、Entity Framework の最新バージョンにアップグレードするために従う必要がある追加の手順がいくつかあります。 アップグレードは、改善された API サーフェスにアクセスできるため、非常に使いやすく、最新のバグ修正が可能になるため、重要です。
まず、NuGet から Entity Framework の最新バージョンを取得する必要があります。
- Project –>NuGet パッケージの管理...NuGet パッケージの管理... オプションがない場合は、最新バージョンの NuGet をインストールする必要があります
- [ オンライン ] タブを選択する
- EntityFramework パッケージを選択する
- [インストール]をクリックします。
次に、モデルをスワップして、新しいバージョンの Entity Framework で導入された DbContext API を使用するコードを生成する必要があります。
EF デザイナーでモデルの空の場所を右クリックし、[コード生成項目の追加]を選択します。
左側のメニューから [オンライン テンプレート] を選択し、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 メソッドを実装します。 このコードは、コンテキストの新しいインスタンスを作成し、それを使用して新しいブログを挿入します。 次に、LINQ クエリを使用して、タイトルごとにアルファベット順に並べられたデータベースからすべてのブログを取得します。
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 プロパティを右クリックし、[プロパティ] を選択します。[プロパティ] ウィンドウで MaxLength の設定を 50 に変更します。これにより、ユーザー名に格納できるデータが 50 文字に制限されます。
DisplayName スカラー プロパティを User エンティティに追加する
モデルが更新され、新しいユーザー エンティティの種類に対応するようにデータベースを更新する準備ができました。
- デザイン画面を右クリックし、[ モデルからデータベースを生成]を選択します。.., Entity Framework は、更新されたモデルに基づいてスキーマを再作成するスクリプトを計算します。
- [完了] をクリックします。
- 既存の DDL スクリプトと、モデルのマッピングとストレージ部分の上書きに関する警告が表示される場合があります。これらの両方の警告については、[ はい ] をクリックしてください
- データベースを作成するための更新された SQL スクリプトが開きます
生成されたスクリプトは、既存のすべてのテーブルを削除し、スキーマを最初から再作成します。 これはローカル開発で機能する可能性がありますが、既にデプロイされているデータベースに変更をプッシュする場合には有効ではありません。 既にデプロイされているデータベースに変更を発行する必要がある場合は、スクリプトを編集するか、スキーマ比較ツールを使用して移行スクリプトを計算する必要があります。 - スクリプトを右クリックして [ 実行] を選択すると、使用している Visual Studio のバージョンに応じて、接続先のデータベースを指定し、LocalDB または SQL Server Express を指定するように求められます
まとめ
このチュートリアルでは、モデルファースト開発を見て、EF Designer でモデルを作成し、そのモデルからデータベースを生成することができました。 次に、モデルを使用して、データベースからデータの読み取りと書き込みを行いました。 最後に、モデルを更新し、モデルに合わせてデータベース スキーマを再作成しました。
.NET