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 データにアクセスする手順です。
-
アプリケーションの作成
Visual Studio を開き、新しい「コンソール アプリ(.NET Framework)」プロジェクトを作成します。
-
Entity Framework のインストールと必要なアセンブリへの参照の追加
-
以下のコマンドを実行して、Entity Framework を自動的にダウンロードしてインストールします。
Install-Package EntityFramework - 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 への参照を追加します。
-
以下のコマンドを実行して、Entity Framework を自動的にダウンロードしてインストールします。
-
プロバイダーの登録
プロジェクトの App.config ファイルを変更して、CSV Entity Framework 6 アセンブリへの参照を追加します。
… … -
コンテキストクラスの作成
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>(); } } -
テーブルモデルの作成
別の .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; } } -
コードでデータをクエリ
コンテキストとエンティティの作成が完了したら、別のクラスでデータをクエリできます。例:
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 を使用しています。
-
アプリケーションの作成
Visual Studio を開き、新しい「コンソール アプリ(.NET Framework)」プロジェクトを作成します。
- Entity Framework のインストールと必要なアセンブリへの参照の追加
-
プロバイダーの登録
プロジェクトの App.config ファイルを変更して、CSV Entity Framework 6 アセンブリへの参照を追加します。
… … -
サーバーエクスプローラーでデータ接続を追加
Entity Data Model を作成する前に、データ接続を作成する必要があります。手順は以下のとおりです。
- サーバーエクスプローラーを開き、「データ接続」を右クリックして「接続の追加...」をクリックします。
- データソースボックスの横にある「変更」ボタンをクリックします。
- 「CData CSV Data Source」を選択し、「OK」をクリックします。
-
接続設定を構成し、「OK」をクリックします。
-
Entity Data Model ウィザードでデータモデルを作成
- Visual Studio のソリューションエクスプローラーで、プロジェクトを右クリックし、「追加」>「新しい項目」をクリックします。
-
表示される「新しい項目の追加」ダイアログで、「ADO.NET Entity Data Model」をクリックし、適切な名前を入力します(例:「CSVEntityDataModel.edmx」)。
-
Entity Data Model ウィザードが開きます。最初のページで「データベースから EF Designer」を選択し、「次へ >」をクリックします。
-
次のページで、先ほど設定したデータ接続を選択します。App.Config にエンティティ接続設定を保存するチェックボックスをオンにし、データ接続のコンテキストクラスの名前(例:「CSVEntities」)を入力して、「次へ >」をクリックします。
-
Visual Studio がライブデータソースから必要な情報を取得すると、ウィザードにプロジェクトに含めることができるデータベースオブジェクトが一覧表示されます。追加するオブジェクトを選択し、モデル名前空間を入力して、「完了」をクリックします。
-
コードでデータをクエリ
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 でデータにアクセスできます。今すぐライセンスをリクエストして、データアプリの構築を始めましょう!