Entity Framework:Code-First と Model-First の比較

Entity Framework(EF)は、.NET アプリケーション向けのオブジェクトリレーショナルマッピング(ORM)フレームワークです。開発者は .NET オブジェクトを使用して、リレーショナルデータベースのデータを操作できます。EF を使用する際には、まずデータベースモデリングのアプローチとして Code-First か Model-First のいずれかを選択する必要があります。

この記事では、両方のアプローチについて解説し、それぞれの主な利点を比較します。また、CData ADO.NET Provider for CSV を使用した具体的な例もご紹介します。

注意:この記事では CSV をデータソースとして使用していますが、ここで紹介する原則は CData がサポートする 270 以上のデータソースすべてに適用できます。

Code-First

Code-First アプローチでは、開発者が C# または VB.NET のクラスを使用してデータモデルを定義し、EF がそのクラスに基づいてデータベーススキーマを生成します。この方法では、.NET アプリケーション内のデータモデルの正確な構造を開発者が完全にコントロールできます。データベーススキーマがアプリケーションとともに変化・進化することが予想される場合に最適です。

利点

  • 開発者による完全なコントロール:開発者がデータモデルのコードを完全にコントロールできるため、データベーススキーマへの変更をコードで処理できます。
  • データベースの柔軟性:Code-First アプローチでは、開発者がデータモデルクラスを手動でカスタマイズできるため、より高い柔軟性が得られます。

Model-First

Model-First アプローチでは、Entity Data Model ウィザードを使用してデータベースモデルを作成し、EF がそのモデルに基づいてデータベーススキーマを生成します。Entity Data Model ウィザードは、データモデルを格納する EDMX ファイル(.edmx)を作成します。コードを書く前にデータベーススキーマの視覚的な表現が必要な場合に最適な方法です。

利点

  • 使いやすさ:Model-First アプローチは、初心者やデータモデルをすばやく作成したい開発者に最適です。EF がデータベーススキーマのコーディング作業の大部分を事前に処理してくれます。
  • 時間の節約:Entity Data Model ウィザードを使用すると、大規模で複雑なデータベースに基づくデータモデルを、手作業でコーディングする場合と比較して非常に短時間で作成できます。

実装例

Code-First

以下は、CData ADO.NET Provider for CSV を使用して、Entity Framework の Code-First アプローチで CSV データにアクセスする手順です。

  1. アプリケーションの作成

    Visual Studio を開き、新しい「コンソール アプリ(.NET Framework)」プロジェクトを作成します。

  2. Entity Framework のインストールと必要なアセンブリへの参照の追加
    1. 以下のコマンドを実行して、Entity Framework を自動的にダウンロードしてインストールします。 Install-Package EntityFramework
    2. EF 6 を使用している場合は、CData ADO.NET Provider のインストールディレクトリ(デフォルトでは「C:\Program Files\CData\CData ADO.NET Provider for CSV 2024\lib」)の lib サブフォルダにある System.Data.CData.CSV.Entities.EF6.dll への参照を追加します。
  3. プロバイダーの登録

    プロジェクトの App.config ファイルを変更して、CSV Entity Framework 6 アセンブリへの参照を追加します。

  4. コンテキストクラスの作成

    CSVContext クラスを作成するには、プロジェクトに新しい .cs ファイルを追加します。CSVContext クラスは、DbContext を継承する基本データベースコンテキストで、データソース内のテーブルを表す DbSet プロパティを公開します。以下のコード例では、OnModelCreating メソッドをオーバーライドし、ModelBuilder の Conventions から PluralizingTableNameConvention を削除し、MigrationHistory テーブルへのリクエストを無効化しています。

    using System.Data.Entity; using System.Data.Entity.Infrastructure; using System.Data.Entity.ModelConfiguration.Conventions; class CSVContext : DbContext { public CSVContext() { } public DbSet<Customer>Customer { set; get; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { // To remove the requests to the Migration History table Database.SetInitializer<CSVContext>(null); // To remove the plural names modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); } }
  5. テーブルモデルの作成

    別の .cs ファイルを作成し、取得する CSV エンティティの名前を付けます(例:Customer)。このファイルでは、Entity と Entity Configuration の両方を定義します。以下の例を参考にしてください。

    using System.Data.Entity.ModelConfiguration; using System.ComponentModel.DataAnnotations.Schema; //EF 6 and later //using System.ComponentModel.DataAnnotations //For versions of EF before 6 [System.ComponentModel.DataAnnotations.Schema.Table("Customer")] public class Customer { [System.ComponentModel.DataAnnotations.Key] public System.String City { get; set; } public System.String TotalDue { get; set; } }
  6. コードでデータをクエリ

    コンテキストとエンティティの作成が完了したら、別のクラスでデータをクエリできます。例:

    CSVContext context = new CSVContext(); context.Configuration.UseDatabaseNullSemantics = true; var query = from line in context.Customer select line;

Model-First

以下は、CData ADO.NET Provider for CSV を使用して、Entity Framework の Model-First アプローチ(C#)で CSV データにアクセスする手順です。この例では Visual Studio 2022 と Entity Framework 6 を使用しています。

  1. アプリケーションの作成

    Visual Studio を開き、新しい「コンソール アプリ(.NET Framework)」プロジェクトを作成します。

  2. Entity Framework のインストールと必要なアセンブリへの参照の追加
  3. プロバイダーの登録

    プロジェクトの App.config ファイルを変更して、CSV Entity Framework 6 アセンブリへの参照を追加します。

  4. サーバーエクスプローラーでデータ接続を追加

    Entity Data Model を作成する前に、データ接続を作成する必要があります。手順は以下のとおりです。

    1. サーバーエクスプローラーを開き、「データ接続」を右クリックして「接続の追加...」をクリックします。
    2. データソースボックスの横にある「変更」ボタンをクリックします。
    3. 「CData CSV Data Source」を選択し、「OK」をクリックします。
    4. 接続設定を構成し、「OK」をクリックします。
  5. Entity Data Model ウィザードでデータモデルを作成
    1. Visual Studio のソリューションエクスプローラーで、プロジェクトを右クリックし、「追加」>「新しい項目」をクリックします。
    2. 表示される「新しい項目の追加」ダイアログで、「ADO.NET Entity Data Model」をクリックし、適切な名前を入力します(例:「CSVEntityDataModel.edmx」)。
    3. Entity Data Model ウィザードが開きます。最初のページで「データベースから EF Designer」を選択し、「次へ >」をクリックします。
    4. 次のページで、先ほど設定したデータ接続を選択します。App.Config にエンティティ接続設定を保存するチェックボックスをオンにし、データ接続のコンテキストクラスの名前(例:「CSVEntities」)を入力して、「次へ >」をクリックします。
    5. Visual Studio がライブデータソースから必要な情報を取得すると、ウィザードにプロジェクトに含めることができるデータベースオブジェクトが一覧表示されます。追加するオブジェクトを選択し、モデル名前空間を入力して、「完了」をクリックします。
  6. コードでデータをクエリ

    Entity Data Model ウィザードでデータモデルを作成したら、別のクラスでデータをクエリできます。例:

    CSVEntities context = new CSVEntities(); context.Configuration.UseDatabaseNullSemantics = true; var query = from line in context.Customer select line;

データ開発者向けの無料 Community License

CData ADO.NET Provider は、従来のデータベースだけでなく、SaaS、NoSQL、ビッグデータシステムなど 270 以上のデータソースへの一貫した接続を提供し、Entity Framework の機能をさらに強化します。

CData ADO.NET Community License を利用すると、個人の .NET プロジェクトでデータにアクセスするためのライブラリを永久無料で使用できます。使い慣れた SQL でデータにアクセスできます。今すぐライセンスをリクエストして、データアプリの構築を始めましょう!