EntityFrameworkでエンティティをモデル化するためのさまざまなアプローチを探る

Entity Frameworkは、基盤となるデータベースプロバイダーと直接対話する必要がなく、CRUD(作成、読み取り、更新、削除)操作を実行するコードを記述できるようにすることで、アプリケーションでのデータアクセスを簡素化します。Entity Frameworkでエンティティをモデル化するには、コードファースト、モデルファースト、データベースファーストの3つのアプローチがあります。この記事では、これら3つのアプローチすべてとその長所と短所について説明します。

Entity Frameworkとは何ですか?なぜすべての誇大宣伝?

MicrosoftのEntityFrameworkは、アプリケーションのオブジェクトモデルをデータモデルから分離するのに役立つ拡張ORMです。これは、ADO.Net用のオープンソースORMフレームワークであり、.NetFrameworkの一部として含まれています。ORMツールを使用すると、アプリケーションのビジネスロジックに集中して、はるかに少ないコードでデータベースにデータを格納できます。ORMを利用して、互換性のない型システム間でデータを変換できます。データの実際の保存方法に関する内部の複雑さを気にすることなく、ドメインオブジェクトを基になるデータベースに保存できます。Entity FrameworkはMicrosoftの成熟したORMであり、さまざまなデータベースで使用できます。

次のセクションでは、EntityFrameworkを使用してエンティティをモデル化するための3つのアプローチのそれぞれについて説明します。

コードファースト

コードファーストアプローチは、ドメイン要件に焦点を当てることにより、アプリケーションでエンティティを作成するのに役立ちます。本質的には、このアプローチを使用してドメイン駆動設計(DDD)に従うことができます。エンティティを定義して構成を指定したら、両方を使用してその場でデータベースを作成できます。コードファーストのアプローチでは、コードをより細かく制御できます。自動生成されたコードを操作する必要はありません。私はこのアプローチが好きです。これはあなたに多くの柔軟性と制御を与えるからです。ドメインクラスの準備ができている場合は、ドメインクラスからデータベースを簡単に作成できるため、常にこのアプローチをお勧めします。

このアプローチの欠点は、基盤となるデータベーススキーマへの変更が失われることです。このアプローチでは、コードでデータベースを定義および作成します。コードファーストアプローチを使用すると、Entity Frameworkを使用して、デザイナーファイルやXMLファイルを使用せずにエンティティモデルを定義できます。POCO(Plain Old CLR Objects)アプローチを使用して、モデルを定義し、データベースを生成できます。

このアプローチでは、通常、エンティティクラスを作成します。これが例です。典型的なエンティティクラスを以下に示します。

 public class Product

   {

      public int ProductId { get; set; }

      public string ProductName { get; set; }

      public float Price { get; set; }

   }

次に、以下に示すようにDbContextクラスを拡張して、カスタムデータコンテキストを定義する必要があります。

public class Context : DbContext

   {

      public DbSet Products { get; set; }

   }

最後に、構成ファイルで接続文字列を指定する必要があります。完了です!

データベースファースト

データベースがすでに設計され、準備ができている場合は、データベースファーストアプローチを使用できます。このアプローチでは、エンティティデータモデル(EDM)が基盤となるデータベースから作成されます。例として、データベースからVisual Studio IDEでedmxファイルを生成する場合は、データベースファーストアプローチを使用します。データベースへの手動変更は簡単に可能であり、必要に応じていつでもEDMを更新できます(たとえば、基盤となるデータベースのスキーマが変更された場合)。これを行うには、Visual StudioIDEのデータベースからEDMを更新するだけです。

モデルファースト

モデルファーストアプローチでは、最初にEDMを作成してから、そこからデータベースを生成できます。通常、Visual Studioのエンティティデータモデルウィザードを使用して空のEDMを作成し、Visual Studioでエンティティとそれらの関係を定義してから、この定義されたモデルからデータベースを生成します。 Visual Studioのデザイナーで、エンティティを簡単に作成し、それらの関係と関連付けを定義できます。デザイナを使用して、エンティティのKeyプロパティとプロパティのデータ型を指定することもできます。部分クラスを使用して、エンティティに追加機能を実装できます。

OK、でもいつモデルファーストアプローチを使うべきですか?ドメインクラスもデータベースも準備ができておらず、ビジュアルデザイナーを使用してデータモデルを定義したい場合は、このアプローチが適しています。ただし、コードファーストアプローチと同様に、モデルファーストアプローチでは、モデルがデータベースを定義するため、データベースへの手動変更は失われます。