次の方法で共有


Database First

このビデオと詳細なチュートリアルでは、Entity Framework を使用した Database First 開発の概要について説明します。 Database First を使用すると、既存のデータベースからモデルをリバース エンジニアリングできます。 モデルは EDMX ファイル (.edmx 拡張子) に格納され、Entity Framework デザイナーで表示および編集できます。 アプリケーションで操作するクラスは、EDMX ファイルから自動的に生成されます。

ビデオを見る

このビデオでは、Entity Framework を使用した Database First 開発の概要について説明します。 Database First を使用すると、既存のデータベースからモデルをリバース エンジニアリングできます。 モデルは EDMX ファイル (.edmx 拡張子) に格納され、Entity Framework デザイナーで表示および編集できます。 アプリケーションで操作するクラスは、EDMX ファイルから自動的に生成されます。

発表者: ローワン・ミラー

ビデオ: WMV | MP4 | WMV (ZIP)

前提条件

このチュートリアルを完了するには、少なくとも Visual Studio 2010 または Visual Studio 2012 をインストールする必要があります。

Visual Studio 2010 を使用している場合は、 NuGet もインストールする必要があります。

 

1. 既存のデータベースを作成する

通常、既存のデータベースを対象としている場合は既に作成されますが、このチュートリアルでは、アクセスするデータベースを作成する必要があります。

Visual Studio と共にインストールされるデータベース サーバーは、インストールした Visual Studio のバージョンによって異なります。

  • Visual Studio 2010 を使用している場合は、SQL Express データベースを作成します。
  • Visual Studio 2012 を使用している場合は、 LocalDB データベースを作成します。

 

先に進み、データベースを生成しましょう。

  • Visual Studio を開く

  • サーバー エクスプローラーの表示 ->

  • [ データ接続] -> [接続の追加]を右クリックします。..

  • 以前にサーバー エクスプローラーからデータベースに接続していない場合、データ ソースとして Microsoft SQL Server を選択する必要があります。

    データ ソースの選択

  • インストールした LocalDB または SQL Express のいずれかに接続し、データベース名として DatabaseFirst.Blogging を入力します

    SQL Express の接続 DF

    LocalDB 接続 DF

  • [OK] を選択すると、新しいデータベースを作成するかどうかを確認するメッセージが表示されたら、[はい] を選択します。

    [データベースの作成] ダイアログ

  • 新しいデータベースがサーバー エクスプローラーに表示され、それを右クリックして [新しいクエリ] を選択します

  • 次の SQL を新しいクエリにコピーし、クエリを右クリックして [実行] を選択します。

CREATE TABLE [dbo].[Blogs] (
    [BlogId] INT IDENTITY (1, 1) NOT NULL,
    [Name] NVARCHAR (200) NULL,
    [Url]  NVARCHAR (200) NULL,
    CONSTRAINT [PK_dbo.Blogs] PRIMARY KEY CLUSTERED ([BlogId] ASC)
);

CREATE TABLE [dbo].[Posts] (
    [PostId] INT IDENTITY (1, 1) NOT NULL,
    [Title] NVARCHAR (200) NULL,
    [Content] NTEXT NULL,
    [BlogId] INT NOT NULL,
    CONSTRAINT [PK_dbo.Posts] PRIMARY KEY CLUSTERED ([PostId] ASC),
    CONSTRAINT [FK_dbo.Posts_dbo.Blogs_BlogId] FOREIGN KEY ([BlogId]) REFERENCES [dbo].[Blogs] ([BlogId]) ON DELETE CASCADE
);

2. アプリケーションを作成する

簡単にするために、Database First を使用してデータ アクセスを実行する基本的なコンソール アプリケーションを構築します。

  • Visual Studio を開く
  • ファイル -> 新規 -> プロジェクト...
  • 左側のメニューとコンソール アプリケーションから Windows を選択する
  • 名前として 「DatabaseFirstSample 」と入力します
  • [OK] を選択します。

 

リバースエンジニアリングモデル

ここでは、Visual Studio の一部として含まれている Entity Framework Designer を使用して、モデルを作成します。

  • Project -> 新しい項目の追加...

  • 左側のメニューから [データ] を選択し、エンティティ データ モデル ADO.NET します

  • 名前として「BloggingModel」と入力し、[OK] をクリックします

  • これにより、エンティティ データ モデル ウィザードが起動します。

  • [データベースから生成] を選択し、[次へ] をクリックします。

    ウィザードの手順 1

  • 最初のセクションで作成したデータベースへの接続を選択し、接続文字列の名前として「BloggingContext」と入力し、[次へ] をクリックします。

    ウィザードの手順 2

  • [テーブル] の横にあるチェックボックスをクリックしてすべてのテーブルをインポートし、[完了] をクリックします

    ウィザードの手順 3

 

リバース エンジニアリング プロセスが完了すると、新しいモデルがプロジェクトに追加され、Entity Framework Designer で表示できるように開かれます。 App.config ファイルも、データベースの接続の詳細と共にプロジェクトに追加されています。

Model Initial

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」と入力し、[追加] をクリックします。

    DbContext テンプレート

 

4. データの読み取りと書き込み

モデルが作成されたので、それを使用していくつかのデータにアクセスします。 データへのアクセスに使用するクラスは、EDMX ファイルに基づいて自動的に生成されます。

このスクリーン ショットは Visual Studio 2012 からのものであり、Visual Studio 2010 を使用している場合、BloggingModel.tt ファイルと BloggingModel.Context.tt ファイルは、EDMX ファイルの下に入れ子にするのではなく、プロジェクトのすぐ下に置きます。

生成されたクラス DF

 

次に示すように、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. データベースの変更に対処する

次に、データベース スキーマにいくつかの変更を加えます。これらの変更を行うときは、それらの変更を反映するようにモデルを更新する必要もあります。

最初の手順では、データベース スキーマにいくつかの変更を加えます。 ここでは、Users テーブルをスキーマに追加します。

  • サーバー エクスプローラーで DatabaseFirst.Blogging データベースを右クリックし、[新しいクエリ] を選択します
  • 次の SQL を新しいクエリにコピーし、クエリを右クリックして [実行] を選択します。
CREATE TABLE [dbo].[Users]
(
    [Username] NVARCHAR(50) NOT NULL PRIMARY KEY,  
    [DisplayName] NVARCHAR(MAX) NULL
)

スキーマが更新されたので、これらの変更でモデルを更新します。

  • EF デザイナーでモデルの空の場所を右クリックし、[データベースからモデルを更新...] を選択すると、更新ウィザードが起動します。

  • 更新ウィザードの [追加] タブで、[テーブル] の横にあるチェック ボックスをオンにすると、スキーマから新しいテーブルを追加することが示されます。 [更新] タブには、更新中に変更がチェックされるモデル内の既存のテーブルが表示されます。 [削除] タブには、スキーマから削除されたテーブルが表示され、更新プログラムの一部としてモデルからも削除されます。 これら 2 つのタブの情報は自動的に検出され、情報提供のみを目的として提供されます。設定を変更することはできません。

    更新ウィザード

  • 更新ウィザードで [完了] をクリックする

 

モデルが更新され、データベースに追加した Users テーブルにマップされる新しい User エンティティが含まれるようになりました。

更新されたモデル

まとめ

このチュートリアルでは、既存のデータベースに基づいて EF Designer でモデルを作成できるデータベースファースト開発について説明しました。 その後、そのモデルを使用して、データベースからデータの読み取りと書き込みを行いました。 最後に、データベース スキーマに加えた変更を反映するようにモデルを更新しました。