Entity Framework Coreについて聞いたことはあるけれど、
・Entity Framework Coreが具体的に何なのか分からない…。
・C#や.NETでの開発にどのように活用できるのか知りたい…。
と思っているエンジニアも少なくないのではないでしょうか。そこでこの記事では、Entity Framework Coreの基礎から具体的な実装方法までを丁寧に解説します。
Entity Framework Coreを使えば、データベース操作をより簡単かつ効率的に行うことが可能になるでしょう。
専門領域:C#,プログラミング,SQL
ピーコック アンダーソン
20年ほどプログラマーとして活動。初期の頃は様々な現場を転々とするプログラマーとして10年ほど経験を積み,その後大手メーカーに入社。C#やSQLServerを中心とした製品開発にて設計、製作、保守、プロジェクトリーダー等を10年近く担当。
…続きを読むINDEX
Entity Framework Coreとは?
Entity Framework Core(EF Core)は、Microsoftによって開発されたオープンソースのオブジェクトリレーショナルマッパー(ORM)です。
オブジェクトリレーショナルマッパー(ORM)はデータベースとオブジェクト指向のプログラミング言語をマッピングする技術・仕組みのことです。
Entity Framework Coreを利用することで、開発者はSQL文を直接記述することなく、データベースのマイグレーションやデータ挿入などのやり取りをコードベースで行うことが可能です。
\文字より動画で学びたいあなたへ/
Udemyで講座を探す >Entity Framework Coreの特徴
Entity Framework Coreは、データベース操作を簡単かつ効率的に行うための多くの特徴を備えています。
ここでは、Entity Framework Coreの特徴に関して分かりやすく解説していきます。
.NETベースでの新規開発ができる
Entity Framework Coreは、.NET用の最新のオブジェクトデータベースマッパーとして、新規開発だけでなく既存のアプリケーションに新たな機能を追加する際にも有効です。
.NETアプリケーションでのデータアクセスの複雑さを抽象化し、コードベースのデータモデルを通じてデータベースの操作を簡単に行うことができます。それによりデータアクセス層の開発を簡素化し、開発プロセスを効率化してくれます。
Entity Framework Coreでは、以下のような操作を、開発者が扱いやすいオブジェクトとして実行できるように設計されています。
- データのクエリ
- 挿入
- 更新
- 削除
Entity Framework Coreは、.NET Coreと完全に統合されており、WindowsだけでなくLinuxやmacOS上で動作するクロスプラットフォームのアプリケーション開発をサポートしています。
また、Entity Framework Coreを利用することで、開発者はデータモデルを中心にアプリケーションを設計し、ビジネスロジックとデータアクセスロジックの両方でコードの再利用性を高めることができます。
Entity Framework Coreの採用により、開発者は次のようなメリットが得られるでしょう。
項目 | 詳細 |
クロスプラットフォーム対応 | Entity Framework Coreは.NET Coreと完全に統合されており、Windows、Linux、macOSで動作するアプリケーションの開発が可能です。 |
コードファースト開発 | データベーススキーマを直接コーディングすることで、開発プロセスをより柔軟かつ迅速に進めることができます。 |
パフォーマンスの最適化 | Entity Framework Coreは、最適なクエリ生成と実行計画のキャッシングを通じて、アプリケーションのパフォーマンスを向上させます。 |
Entity Framework Coreを使用することで、.NETベースの新規開発プロジェクトや既存プロジェクトの機能拡張が、より効率的かつ効果的に行えます。
新しいデータベースに対応
Entity Framework Coreは、従来のSQLベースのデータベースだけでなく、Azure Cosmos DBのようなNoSQLデータベースにも対応しています。多種多様なデータベースに対応しているため、開発者はアプリケーションの要件に最適なデータストレージを選択可能です。
Entity Framework Coreのアップデートは継続的に行われており、新しいデータベース技術に対応するための積極的な改善が行われています。そのため、開発者はほとんどSQLを書かずにデータベースの更新や取得を行うことができ、アプリケーションの開発速度と効率を大幅に向上させることが可能です。
SQLに関する知識をより深めたい方は、「【SQL入門】データベース言語の基礎知識を学んでMySQL環境で実践しよう!をご覧ください。
CodeFirstの実装ができる
Entity Framework Coreでは、Code Firstアプローチを採用しています。データベースやテーブルを事前に設計するのではなく、ソースコードを先に記述し、そのコードに基づいてEntity Framework Coreがデータベースやテーブルの生成を行う方法です。
Code Firstアプローチを用いることで、データベース設計をアプリケーションの開発プロセスに自然に統合することができ、データベースがまだ存在しない場合でも、ソースコードから直接データベースを作成することが可能になります。
また、マイグレーション機能を利用することで、データベーススキーマのバージョン管理と変更が容易になり、アプリケーションのデータベースを効率的に更新・維持することができます。
Entity Framework Coreの使い方【事前準備】
Entity Framework Coreを使用する前に、いくつかの事前準備が必要です。
ここでは、Entity Framework Coreをプロジェクトに導入し、データベース操作を開始するための基盤を構築する方法に関して解説します。
①Entity Framework Coreのパッケージをインストールする
Entity Framework Coreを使用するためには、まず必要なパッケージをインストールする必要があります。Entity Framework Coreは、さまざまなデータベースプロバイダに対応しておりますので、使用するデータベースに応じたパッケージを選択してインストールしてください。
例えば、SQL Serverを使用する場合はMicrosoft.EntityFrameworkCore.SqlServerを、SQLiteを使用する場合はMicrosoft.EntityFrameworkCore.SQLiteをインストールします。
パッケージのインストールは、コマンドラインインターフェース(CLI)またはVisual StudioのNuGetパッケージマネージャを通じて行えます。
CLIを使用する場合、次のコマンドを実行してください。(SQL Serverの場合)
1 |
dotnet add package Microsoft.EntityFrameworkCore.SqlServer |
Visual Studioを使用する場合は、プロジェクトの依存関係にパッケージを追加することでインストールを行います。
②DB構築を行う
Entity Framework Coreでは、Code Firstアプローチを用いてデータベースとテーブルの構築を行います。
Code Firstアプローチでは、まずC#のクラスを定義し、クラスを基にデータベーススキーマを生成します。
データベースの構築とテーブルの準備には、次のようなマイグレーションコマンドを使用するのが一般的です。
マイグレーションの追加
データベーススキーマの変更を管理するためにマイグレーションを作成します。
次のコマンドで新しいマイグレーションを追加しましょう。
1 |
dotnet ef migrations add InitialCreate |
モデルからデータベースへの最初のマイグレーションを作成し、「InitialCreate」という名前を付けます。
データベースの更新
次に、マイグレーションを適用してデータベースを更新します。
コマンドでデータベースにマイグレーションを適用し、必要なテーブルを生成します。
1 |
dotnet ef database update |
コマンドを使用することで、Entity Framework Coreを用いたデータベースの構築が完了します。
Code Firstアプローチにより、データベーススキーマの変更が発生した場合にも、簡単にマイグレーションを作成し、適用することが可能です。結果的に、データベースのバージョン管理が容易になり、開発プロセスがよりスムーズに進行するでしょう。
Entity Framework Coreの使い方【実装】
Entity Framework Coreの実装は、データベース操作を抽象化し、開発者がより直感的にデータベースとやり取りできるようにすることを目的としています。
ここでは以下の手順に従って、Entity Framework Coreを使用したデータベース操作の基本を理解していきましょう。
- Entityクラスを作成する
- DbContext拡張クラスを作成する
- マイグレーションを作成する
- データベースを生成し、アクセスを確認する
Entityクラスを作成する
Entity Framework Coreでは、データベースのテーブルはEntityクラスにマッピングされます。各Entityクラスはテーブルのレコードを表し、クラスのプロパティはテーブルのカラムに対応しています。
Entityクラスを設計する際には、次の点を考慮してください。
項目 | 詳細 |
主キーのプロパティ | 各Entityクラスには、テーブルの主キーに対応するプロパティが必要です。Entity Framework Coreが、各レコードを一意に識別するために使用します。 |
プロパティのデータ型 | プロパティのデータ型は、データベースのカラムの型と対応させる必要があります。たとえば、SQL Serverのint型はC#のint型に、nvarchar(max)はstring型に対応します。 |
以下は、Blogというテーブルを表すEntityクラスの簡単な例です。
1 2 3 4 5 6 7 |
public class Blog { public int BlogId { get; set; } // 主キー public string Name { get; set; } // ブログの名前 public string Url { get; set; } // ブログのURL } |
DbContext拡張クラスを作成する
DbContextクラスは、Entity Framework Coreの中核をなすクラスで、データベースとのセッションを表します。
DbContextを継承したクラスでは、次のようにDbSet型のプロパティを定義して、操作するテーブルを指定します。
1 2 3 4 5 6 7 8 9 10 |
public class BloggingContext : DbContext { public DbSet<Blog> Blogs { get; set; } // Blogテーブルへのアクセスを提供 protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;"); } } |
クラスでは、OnConfiguringメソッドをオーバーライドして、データベース接続文字列を設定します。
マイグレーションを作成する
マイグレーションは、モデルの変更をデータベーススキーマに適用するためのメカニズムです。
EntityクラスやDbContextクラスを定義した後、次のコマンドを使用してマイグレーションを追加し、データベースを更新します。
1 2 |
dotnet ef migrations add InitialCreate dotnet ef database update |
コマンドにより、定義したクラスからデータベーススキーマが生成され、データベースが作成されます。
データベースを生成し、アクセスを確認する
データベースとのやり取りには、主にLINQ(Language Integrated Query)を使用します。
LINQを用いると、C#のクエリ式でデータを照会し、操作することができます。
また、必要に応じて、DbContextクラスのDatabase.ExecuteSqlRawメソッドを使用して、直接SQLクエリを実行することも可能です。
1 |
using (var context = |
発行されたSQLを見る方法
Entity Framework Coreでは、アプリケーションがデータベースに発行するSQLクエリを確認することができます。この機能は、アプリケーションのデバッグや最適化の際に非常に便利です。
Entity Framework CoreでSQLクエリを確認する方法にはいくつかの手段がありますが、ここでは主にログ出力を利用した方法に焦点を当てます。
ログ出力を利用する
Entity Framework Coreは、Microsoft.Extensions.Loggingライブラリを通じてログ情報を出力します。そのため、実行されるSQLクエリを含む様々な実行情報を、ログとして確認することが可能です。
アプリケーションのDbContextクラス内でログの詳細度を設定することにより、SQLクエリのログを有効にできます。
1 2 3 4 5 6 7 8 |
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=MyDatabase;Trusted_Connection=True;") .LogTo(Console.WriteLine, LogLevel.Information); // ログレベルに応じてログをコンソールに出力 } |
上記のコード例では、LogToメソッドを使用して、ログをコンソールに出力するように設定しています。
ログレベルLogLevel.Informationは、実行されたSQLクエリを含む情報レベルのログを出力します。
SQL Server Profilerやその他のツールを使用する
SQL Serverを使用している場合、SQL Server Profilerというツールを使用して、データベースに対して実行されるクエリをリアルタイムでキャプチャすることも可能です。このツールは、SQL Server Management Studio (SSMS) の一部として提供されています。
また、他のデータベースシステムに対しても、類似のデータベースプロファイリングツールが存在し、実行されるSQLクエリの監視に利用することができます。
発行されたSQLクエリを見ることは、データベースの動作を理解し、アプリケーションのパフォーマンスを最適化する上でとても重要です。
SQLに関するさらなる知識を深めたい場合は、「【SQL入門】データベース言語の基礎知識を学んでMySQL環境で実践しよう!」をご覧ください。
Entity Framework Coreを実際に使ってみよう!
この記事では、Entity Framework Coreの基本的な使い方から、データベースとのやり取り、マイグレーションの作成方法までをご紹介しました。
Entity Framework Coreを使うと、データベース操作が簡単になり、開発プロセスが効率的に進みます。Entity Framework Coreを学ぶことは、アプリケーション開発をする上でとても役立ちます。
更に深い知識を得たい方には、以下の講座がおすすめです。
レビューの一部をご紹介
評価:★★★★★
コメント:EFがDDDに利用出来ると思いませんでしたが、すごいですね。職場で導入いたします。
評価:★★★★
コメント:EitityFrameworkCoreの基礎編から続けて学習しました。スムーズに学習を継続することができ、とても面白かったです。
Entity Framework Coreを使ったアプリケーション開発のスキルをさらに伸ばしましょう。
C#でドメイン駆動開発パート4【EntityFrameworkCore+DDD】
EntityFrameworkCoreとドメインアーキテクチャーを組み合わせる方法を解説しています。
\無料でプレビューをチェック!/
講座を見てみる
最新情報・キャンペーン情報発信中